Вот такая вот хреновина. Ставлю колбек PsSetCreateThreadNotifyRoutine. Внутри колбека вызываю PsLookupProcessThreadByCid. Когда возникает колбэк, естессно формирую CID и передаю функции... Возвращает STATUS_INVALID_CID именно для потока передаваемому в качестве параметра. Подставляешь ему любой другой поток отрабатывает нормально. Я так подозреваю, что новый поток добавляется в таблицу хэндлов только после заврешения данного колбэка. Что вы можете сказать по этому поводу, есть какие варианты получить ETHREAD внутри данного колбека ??? Код: Код (Text): NTSTATUS lsAddListEntryThread(HANDLE ProcessId,HANDLE ThreadId, PCHAR ProcessName) { PSTHREAD psthread = NULL; PSTHREAD pnextthread = NULL; PVOID ethread = NULL; PVOID eprocess = NULL; CLIENT_ID cid; NTSTATUS ns; __asm int 3; __try{ if (KeGetCurrentIrql() > APC_LEVEL) {return STATUS_UNSUCCESSFUL;}; psthread = pThreadListHead; while (psthread->NextEntry) {(ULONG)psthread = psthread->NextEntry;}; pnextthread = ExAllocatePool(NonPagedPool,sizeof(STHREAD)); if (!pnextthread){return STATUS_UNSUCCESSFUL;}; pnextthread->NextEntry = 0; pnextthread->ProcessId = ProcessId; pnextthread->ThreadId = ThreadId; pnextthread->ProcessName = NULL; pnextthread->ethread = 0; //if ((ns = (*_PsLookupThreadByThreadId)((PVOID)pnextthread->ThreadId,ðread)) != STATUS_SUCCESS) cid.UniqueProcess = ProcessId; cid.UniqueThread = ThreadId; if ((ns = (*_PsLookupProcessThreadByCid)(&cid,NULL,ðread)) != STATUS_SUCCESS) { ExFreePool(pnextthread); return STATUS_UNSUCCESSFUL; } ObDereferenceObject(ethread); pnextthread->ethread = (ULONG)ethread; psthread->NextEntry = (ULONG)pnextthread; if (ProcessName){ pnextthread->ProcessName = ExAllocatePool(NonPagedPool,strlen(ProcessName)+1); if (!pnextthread->ProcessName) {psthread->NextEntry = 0; ExFreePool(pnextthread); return STATUS_UNSUCCESSFUL;} RtlZeroMemory(pnextthread->ProcessName,strlen(ProcessName)+1); RtlCopyMemory(pnextthread->ProcessName,ProcessName,strlen(ProcessName)); } } __except(EXCEPTION_EXECUTE_HANDLER){return STATUS_UNSUCCESSFUL;}; return STATUS_SUCCESS; }