Добрый вечер всем! Использую WinDBG в режиме kernel Debugging Как можно узнать кто создал данный поток (контекст которого сейчас активен) ? Код (Text): kd> k ChildEBP RetAddr 00b5ee04 75b4fc8f lsm!CTSSession::Start 00b5ee20 75bb4c53 RPCRT4!Invoke+0x2a 00b5f228 755ed936 RPCRT4!NdrStubCall2+0x2d6 00b5f270 755ed9c6 ole32!CStdStubBuffer_Invoke+0xb6 00b5f2b8 755edf1f ole32!SyncStubInvoke+0x3c 00b5f304 7550213c ole32!StubInvoke+0xb9 00b5f3e0 75502031 ole32!CCtxComChnl::ContextInvoke+0xfa 00b5f3fc 755ea754 ole32!MTAInvoke+0x1a 00b5f42c 755edcbb ole32!AppInvoke+0xab 00b5f50c 755ea773 ole32!ComInvokeWithLockAndIPID+0x372 00b5f558 75b4f34a ole32!ThreadInvoke+0x302 00b5f594 75b4f4da RPCRT4!DispatchToStubInCNoAvrf+0x4a 00b5f5ec 75b4f3c6 RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0x16c 00b5f614 75b50cef RPCRT4!RPC_INTERFACE::DispatchToStub+0x8b 00b5f64c 75b4f882 RPCRT4!RPC_INTERFACE::DispatchToStubWithObject+0xb2 00b5f698 75b4f7a4 RPCRT4!LRPC_SCALL::DispatchRequest+0x23b 00b5f6b8 75b4f763 RPCRT4!LRPC_SCALL::QueueOrDispatchCall+0xbd 00b5f6d4 75b4f5ff RPCRT4!LRPC_SCALL::HandleRequest+0x34f 00b5f708 75b4f573 RPCRT4!LRPC_SASSOCIATION::HandleRequest+0x144 00b5f740 75b4ee4f RPCRT4!LRPC_ADDRESS::HandleRequest+0xbd 00b5f7b8 75b4ece7 RPCRT4!LRPC_ADDRESS::ProcessIO+0x50a 00b5f7c4 75b51357 RPCRT4!LrpcServerIoHandler+0x16 00b5f7d4 76eed3c7 RPCRT4!LrpcIoComplete+0x16 00b5f7fc 76ef0778 ntdll!TppAlpcpExecuteCallback+0x1c5 00b5f964 77061194 ntdll!TppWorkerThread+0x5a4 00b5f970 76f1b495 kernel32!BaseThreadInitThunk+0xe 00b5f9b0 76f1b468 ntdll!__RtlUserThreadStart+0x70 00b5f9c8 00000000 ntdll!_RtlUserThreadStart+0x1b
Код (Text): .thread получаешь адрес структуры текущего или Код (Text): !thread .process адрес текущего процесса Код (Text): !process адрес
Спасибо конечно за подсказку, про process и thread я знал ) Я имел ввиду как узнать какой поток запустил этот поток? Допустим в потоке А есть код: Код (Text): void ThreadA(void*) { QueueUserWorkItem(ThreadB, 10); } а в потоке В такой: Код (Text): void ThreadВ(void*) { } Находясь в потоке В могу ли я как-то увидеть, что создал поток В, поток А ?
ntcdm В общем случае – никак. Можно поставить трассировку на создание нитей и посмотреть лог. Трассировку можно организовать средствами WinDbg: точка останова на выходе функции создания нити с выражением, печатающим текущую и созданную нить и командой gc в конце.
Great OB_FLAG_CREATOR_INFO -> OBJECT_HEADER_CREATOR_INFO, если GF -> FLG_MAINTAIN_OBJECT_TYPELIST до загрузки оси. Вопрос в том, поддерживает ли это WinDbg.