C кодом ошибки IRQL_NOT_LESS_OR_EQUAL. Код (Text): VOID Thread_proc(PVOID count) { PsTerminateSystemThread(STATUS_SUCCESS); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { OBJECT_ATTRIBUTES oa_2; HANDLE hthread; PKTHREAD thread; DriverObject->DriverUnload = DriverUnload; DriverObject->DriverExtension->AddDevice = AddDevice; if (KeGetCurrentIrql() == PASSIVE_LEVEL) { InitializeObjectAttributes(&oa_2, NULL, OBJ_KERNEL_HANDLE, NULL, NULL); status = PsCreateSystemThread(&hthread, THREAD_ALL_ACCESS, &oa_2, 0, NULL, (PKSTART_ROUTINE) Thread_proc, NULL); if (!NT_SUCCESS(status)) { return STATUS_DEVICE_CONFIGURATION_ERROR; } ObReferenceObjectByHandle(hthread, THREAD_ALL_ACCESS, NULL, KernelMode, (PVOID *) thread, NULL); ZwClose(hthread); KeWaitForSingleObject(thread, Executive, KernelMode, FALSE, NULL); ObDereferenceObject(thread); } return STATUS_SUCCESS; } Кто знает, в чём ошибка? Все функции драйвера в VS по умолчанию расположены в неперемещаемой памяти.
OBJECT_ATTRIBUTES oa_2; это входной параметр. Ты его не инициализировал. Вообще зачем он тебе ? Напиши ноль и все
Ой точно, что-то я невнимательный стал. У меня работает вот так: Код (Text): NTSTATUS DriverEntry(PDRIVER_OBJECT pdoDriver,PUNICODE_STRING pusRegistry) { DbgPrint("Test Driver start success"); HANDLE hThread; PVOID pvThreadOb; if(NT_SUCCESS(PsCreateSystemThread(&hThread,THREAD_ALL_ACCESS,0,0,0,MainKernelThread,0))) { ObReferenceObjectByHandle(hThread,THREAD_ALL_ACCESS,0,KernelMode,&pvThreadOb,0); ZwClose(hThread); KeWaitForSingleObject(pvThreadOb,Executive,KernelMode,FALSE,0); ObDereferenceObject(pvThreadOb); } DbgPrint("Test Driver exit."); return STATUS_FAILED_DRIVER_ENTRY; }