BSOD при загрузке драйвера ядра в windows 10 - PullRequest
0 голосов
/ 14 июня 2019

Я начал изучать разработку драйверов для Windows и создал свой первый базовый драйвер.Но при загрузке драйвера я получаю BSOD.

Я следовал этой официальной документации msdn для создания основного кода драйвера: ссылка .Вот полный код драйвера: -

#include <ntddk.h>
#include <wdf.h>
#include <excpt.h>
#include <windowsx.h>
#include <wdm.h>

DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;
VOID DrvUnload(PDRIVER_OBJECT  DriverObject);
NTSTATUS DriverEntry(PDRIVER_OBJECT  DriverObject, PUNICODE_STRING  RegistryPath);

NTSTATUS
DriverEntry(
    _In_ PDRIVER_OBJECT     DriverObject,
    _In_ PUNICODE_STRING    RegistryPath
) {
    // NTSTATUS variable to record success or failure
    NTSTATUS status = STATUS_SUCCESS;

    // Allocate the driver configuration object
    WDF_DRIVER_CONFIG config;

    // Print "Hello World" for DriverEntry
    KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n"));
    DbgPrint("[*] The driver run successfully.");
    // Initialize the driver configuration object to register the
    // entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAdd
    WDF_DRIVER_CONFIG_INIT(&config,
        KmdfHelloWorldEvtDeviceAdd
    );

    // Finally, create the driver object
    status = WdfDriverCreate(DriverObject,
        RegistryPath,
        WDF_NO_OBJECT_ATTRIBUTES,
        &config,
        WDF_NO_HANDLE
    );
    //DriverObject->DriverUnload = &DrvUnload;
    return status;
}

NTSTATUS
KmdfHelloWorldEvtDeviceAdd(
    _In_    WDFDRIVER       Driver,
    _Inout_ PWDFDEVICE_INIT DeviceInit
)
{
    // We're not using the driver object,
    // so we need to mark it as unreferenced
    UNREFERENCED_PARAMETER(Driver);

    NTSTATUS status;

    // Allocate the device object
    WDFDEVICE hDevice;

    // Print "Hello World"
    KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n"));
    DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd from dbgprint\n");
    // Create the device object
    status = WdfDeviceCreate(&DeviceInit,
        WDF_NO_OBJECT_ATTRIBUTES,
        &hDevice
    );
    return status;
}

/*
VOID DrvUnload(PDRIVER_OBJECT  DriverObject)
{
    IoDeleteDevice(DriverObject->DeviceObject);
    DbgPrint("Driver unloaded successfully");
    return;
}
*/

Перед загрузкой я отключил проверку подписи драйвера с помощью bcdedit /set testsigning on.Но когда я пытаюсь загрузить драйвер с помощью загрузчика драйвера OSR или команды sc, я получаю BSOD со следующей ошибкой system_thread_exception_not_handled.PS: я пробовал еще немного кодов и еще несколько систем, но все они вызывают этот BSOD.Итак, я думаю, что есть какой-то шаг, который я пропускаю.

...