オブジェクトのメソッドもダンプしてみる
うぇーい。Vista SP1 でも問題なく実装・動作できました。もっとも各メソッドがどういう働きをして、どのタイミングで読み出されるのか調べる時間はとてもなさそうなので、例によって「フックできたぜうぇーい」で終わりそう。
ちなみにNULLでも新しい関数を設定してあげれば、ちゃんと呼び出してくれます。
Microsoft Windows 2000 [Version 5.00.2195] Build: May 21 2008 : 00:40:56 : v1.20 dbghelp.dll: 6.9.0003.113 (debuggers(dbg).080320-1813) ApiVersion : 4.0.5.0 Name Dump Open Close Delete Parse Security QueryName OkayToClose Directory NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL Mutant NULL NULL NULL _ExpDeleteMutant@4 NULL _SeDefaultObjectMethod@32 NULL NULL Thread NULL NULL NULL _PspThreadDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL FilterCommunicationPort NULL NULL _FltpPortClose@20 _FltpPortDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL Controller NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL Profile NULL NULL NULL _ExpProfileDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL Event NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL Type NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL Section NULL NULL NULL _MiSectionDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL EventPair NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL SymbolicLink NULL NULL NULL _ObpDeleteSymbolicLink@4 _ObpParseSymbolicLink@40 _SeDefaultObjectMethod@32 NULL NULL Desktop NULL _MapDesktop@20 _UnmapDesktop@20 _FreeDesktop@4 NULL _SeDefaultObjectMethod@32 NULL _OkayToCloseDesktop@12 Timer NULL NULL NULL _ExpTimerDpcRoutine@16 +0x36 NULL _SeDefaultObjectMethod@32 NULL NULL File NULL NULL _IopCloseFile@20 _IopDeleteFile@4 _IopParseFile@40 _IopGetSetSecurityObject@32 _IopQueryName@20 NULL WindowStation NULL _Scale_None@20 _DestroyWindowStation@20 _FreeWindowStation@4 _ParseWindowStation@40 _SeDefaultObjectMethod@32 NULL _OkayToCloseWindowStation@12 Driver NULL NULL NULL _IopDeleteDriver@4 NULL _SeDefaultObjectMethod@32 NULL NULL WmiGuid NULL NULL NULL NULL NULL _WmipSecurityMethod@32 NULL NULL Device NULL NULL NULL _IopDeleteDevice@4 _IopParseDevice@40 _IopGetSetSecurityObject@32 NULL NULL Token NULL NULL NULL _SepTokenDeleteMethod@4 NULL _SeDefaultObjectMethod@32 NULL NULL IoCompletion NULL NULL NULL _IopDeleteIoCompletion@4 NULL _SeDefaultObjectMethod@32 NULL NULL Process NULL NULL NULL _PspProcessDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL Adapter NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL Key NULL NULL _CmpCloseKeyObject@20 _CmpDeleteKeyObject@4 _CmpParseKey@40 _CmpSecurityMethod@32 _CmpQueryKeyName@20 NULL Job NULL NULL _PspJobClose@20 _PspJobDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL WaitablePort NULL NULL _LpcpClosePort@20 _LpcpDeletePort@4 NULL _SeDefaultObjectMethod@32 NULL NULL Port NULL NULL _LpcpClosePort@20 _LpcpDeletePort@4 NULL _SeDefaultObjectMethod@32 NULL NULL Callback NULL NULL NULL _xHalLocateHiberRanges@4 NULL _SeDefaultObjectMethod@32 NULL NULL FilterConnectionPort NULL NULL _FltpServerPortClose@20 _FltpServerPortDelete@4 NULL _SeDefaultObjectMethod@32 NULL NULL Semaphore NULL NULL NULL NULL NULL _SeDefaultObjectMethod@32 NULL NULL
Microsoft Windows XP [Version 5.1.2600] Build: May 21 2008 : 00:40:56 : v1.20 dbghelp.dll: 6.9.0003.113 (debuggers(dbg).080320-1813) ApiVersion : 4.0.5.0 Name Dump Open Close Delete Parse Security QueryName OkayToClose Directory NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Thread NULL NULL NULL _PspThreadDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Mutant NULL NULL NULL _ExpDeleteMutant@4 NULL _SeDefaultObjectMethod@36 NULL NULL FilterCommunicationPort NULL NULL _FltpPortClose@20 _FltpPortDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Controller NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Type NULL NULL NULL _ObpDeleteObjectType@4 NULL _SeDefaultObjectMethod@36 NULL NULL Profile NULL NULL NULL _ExpProfileDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Event NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL SymbolicLink NULL NULL NULL _ObpDeleteSymbolicLink@4 _ObpParseSymbolicLink@40 _SeDefaultObjectMethod@36 NULL NULL Section NULL NULL NULL _MiSectionDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL EventPair NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Desktop NULL _ExpWin32OpenProcedure@20 _ExpWin32CloseProcedure@20 _ExpWin32DeleteProcedure@4 NULL _SeDefaultObjectMethod@36 NULL _ExpWin32OkayToCloseProcedure@1 Timer NULL NULL NULL _ExpTimerApcRoutine@20 +0x9C NULL _SeDefaultObjectMethod@36 NULL NULL WindowStation NULL _ExpWin32OpenProcedure@20 _ExpWin32CloseProcedure@20 _ExpWin32DeleteProcedure@4 _ExpWin32ParseProcedure@40 _SeDefaultObjectMethod@36 NULL _ExpWin32OkayToCloseProcedure@1 File NULL NULL _IopCloseFile@20 _IopDeleteFile@4 _IopParseFile@40 _IopGetSetSecurityObject@36 _IopQueryName@20 NULL Driver NULL NULL NULL _IopDeleteDriver@4 NULL _SeDefaultObjectMethod@36 NULL NULL WmiGuid NULL NULL _WmipCloseMethod@20 _WmipDeleteMethod@4 NULL _WmipSecurityMethod@36 NULL NULL KeyedEvent NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Token NULL NULL NULL _SepTokenDeleteMethod@4 NULL _SeDefaultObjectMethod@36 NULL NULL Device NULL NULL NULL _IopDeleteDevice@4 _IopParseDevice@40 _IopGetSetSecurityObject@36 NULL NULL DebugObject NULL NULL _DbgkpCloseObject@20 _DbgkpDeleteObject@4 NULL _SeDefaultObjectMethod@36 NULL NULL IoCompletion NULL NULL NULL _IopDeleteIoCompletion@4 NULL _SeDefaultObjectMethod@36 NULL NULL Process NULL NULL NULL _PspProcessDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Adapter NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Key NULL NULL _CmpCloseKeyObject@20 _CmpDeleteKeyObject@4 _CmpParseKey@40 _CmpSecurityMethod@36 _CmpQueryKeyName@20 NULL Job NULL NULL _PspJobClose@20 _PspJobDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL WaitablePort NULL NULL _LpcpClosePort@20 _LpcpDeletePort@4 NULL _SeDefaultObjectMethod@36 NULL NULL Port NULL NULL _LpcpClosePort@20 _LpcpDeletePort@4 NULL _SeDefaultObjectMethod@36 NULL NULL Callback NULL NULL NULL _DbgkpDeleteObject@4 NULL _SeDefaultObjectMethod@36 NULL NULL FilterConnectionPort NULL NULL _FltpServerPortClose@20 _FltpServerPortDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Semaphore NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL
以下はVista SP1。VistaではKernel Transaction Manager関連っぽいTm~~というオブジェクトタイプが追加されてますね。
Microsoft Windows [Version 6.0.6001] Build: May 21 2008 : 00:40:56 : v1.20 dbghelp.dll: 6.9.0003.113 (debuggers(dbg).080320-1813) ApiVersion : 4.0.5.0 Name Dump Open Close Delete Parse Security QueryName OkayToClose TpWorkerFactory NULL NULL _ExpCloseWorkerFactory@20 _ExpDeleteWorkerFactory@4 NULL _SeDefaultObjectMethod@36 NULL NULL Directory NULL NULL _ObpCloseDirectoryObject@20 NULL NULL _SeDefaultObjectMethod@36 NULL NULL Mutant NULL NULL NULL _ExpDeleteMutant@4 NULL _SeDefaultObjectMethod@36 NULL NULL Thread NULL _PspThreadOpen@24 NULL _PspThreadDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL FilterCommunicationPort NULL NULL _FltpClientPortClose@20 _FltpClientPortDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL TmTx NULL NULL _TmpCloseTransaction@20 _TmpDeleteTransaction@4 NULL _SeDefaultObjectMethod@36 NULL NULL Controller NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL EtwRegistration NULL _AlpcpOpenPort@24 _EtwpCloseRegistrationObject@20 _EtwpDeleteRegistrationObject@4 NULL _SeDefaultObjectMethod@36 NULL NULL Profile NULL NULL NULL _ExpProfileDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Event NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Type NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Section NULL NULL NULL _MiSectionDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL EventPair NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL SymbolicLink NULL NULL NULL _ObpDeleteSymbolicLink@4 _ObpParseSymbolicLink@40 _SeDefaultObjectMethod@36 NULL NULL Desktop NULL _ExpWin32OpenProcedure@24 _ExpWin32CloseProcedure@20 _ExpWin32DeleteProcedure@4 NULL _SeDefaultObjectMethod@36 NULL _ExpWin32OkayToCloseProcedure@1 Timer NULL NULL NULL _ExpDeleteTimer@4 NULL _SeDefaultObjectMethod@36 NULL NULL File NULL NULL _IopCloseFile@20 _IopDeleteFile@4 _IopParseFile@40 _IopGetSetSecurityObject@36 _IopQueryName@24 NULL WindowStation NULL _ExpWin32OpenProcedure@24 _ExpWin32CloseProcedure@20 _ExpWin32DeleteProcedure@4 _ExpWin32ParseProcedure@40 _SeDefaultObjectMethod@36 NULL _ExpWin32OkayToCloseProcedure@1 TmEn NULL NULL _TmpCloseEnlistment@20 _TmpDeleteEnlistment@4 NULL _SeDefaultObjectMethod@36 NULL NULL Driver NULL NULL NULL _IopDeleteDriver@4 NULL _SeDefaultObjectMethod@36 NULL NULL WmiGuid NULL NULL NULL _WmipDeleteMethod@4 NULL _WmipSecurityMethod@36 NULL NULL KeyedEvent NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Device NULL NULL NULL _IopDeleteDevice@4 _IopParseDevice@40 _IopGetSetSecurityObject@36 NULL NULL Token NULL NULL NULL _SepTokenDeleteMethod@4 NULL _SeDefaultObjectMethod@36 NULL NULL ALPC Port NULL _AlpcpOpenPort@24 _AlpcpClosePort@20 _AlpcpDeletePort@4 NULL _SeDefaultObjectMethod@36 NULL NULL DebugObject NULL NULL _DbgkpCloseObject@20 _xHalDpReplaceEnd@4 NULL _SeDefaultObjectMethod@36 NULL NULL IoCompletion NULL NULL _IopCloseIoCompletion@20 _IopDeleteIoCompletion@4 NULL _SeDefaultObjectMethod@36 NULL NULL Process NULL _PspProcessOpen@24 _PspProcessClose@20 _PspProcessDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL TmRm NULL _TmpOpenResourceManager@24 _TmpCloseResourceManager@20 _TmpDeleteResourceManager@4 NULL _SeDefaultObjectMethod@36 NULL NULL Adapter NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL Key NULL NULL _CmpCloseKeyObject@20 _CmpDeleteKeyObject@4 _CmpParseKey@40 _CmpSecurityMethod@36 _CmpQueryKeyName@24 NULL Job NULL NULL _PspJobClose@20 _PspJobDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Session NULL NULL NULL _MiSessionObjectDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL TmTm NULL _TmpOpenTransactionManager@24 _TmpCloseTransactionManager@20 _TmpDeleteTransactionManager@4 NULL _SeDefaultObjectMethod@36 NULL NULL Callback NULL NULL NULL _xHalDpReplaceEnd@4 NULL _SeDefaultObjectMethod@36 NULL NULL FilterConnectionPort NULL NULL _FltpServerPortClose@20 _FltpServerPortDelete@4 NULL _SeDefaultObjectMethod@36 NULL NULL Semaphore NULL NULL NULL NULL NULL _SeDefaultObjectMethod@36 NULL NULL
それにしてもデバッグシンボルすごい! 楽しい!
05/21追記
2000SP4分を追記。
あとDumpメソッドに関しては存在が疑われる。このへんの研究資料をみていると、Dumpメソッドなど無いようである。DumpProcedureを含む定義はシンボルからとってきたものなのだけれども、XP SP3やVista SP1に関しては不確定なところがあって*1、信頼性に欠いているといえる。インサイドWindowsにはどう書いてあったか、今は知人に貸しているので確認できない。
*1:シンボルがリリースされていない!