Возник следующий вопрос - в функции AddDevice() создаю поток,в котором просто вывожу тестовую строку :
...
NTSTATUS ntStatus = STATUS_UNSUCCESSFUL;
PVOID pThreadOb = NULL;
HANDLE hThread;
ntStatus = PsCreateSystemThread(&hThread,THREAD_ALL_ACCESS,0,0,0,ControlRoutine,DeviceObject);
if(NT_SUCCESS( ntStatus ))
{
ObReferenceObjectByHandle(hThread, THREAD_ALL_ACCESS, NULL, KernelMode, &pThreadOb, NULL );
ZwClose(hThread);
}
...
VOID ControlRoutine( __in PVOID Context )
{
while(1)
{
DebugPrint((" ControlRoutine \n"));
}
}
...
При этом в DebugView наблюдаю только вывод "ControlRoutine",никакая другая отладочная информация не выводится (из других критических мест в драйвере) и всё жутко виснет...
Я подозреваю,что в этом случае созданный системный поток просто напросто не вытесняется - так ли это и почему?