1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <ntddk.h>
#include <wdf.h>

DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_UNLOAD MyEvtDriverUnload; // 卸载函数(KMDF 风格)
EVT_WDF_DRIVER_DEVICE_ADD MyEvtDeviceAdd; // 必须定义,但可以不创建设备

// 驱动卸载回调
VOID MyEvtDriverUnload(_In_ WDFDRIVER Driver)
{
UNREFERENCED_PARAMETER(Driver);
KdPrint(("qi: KMDF Driver Unload!\n"));
}

// 添加设备回调(必须提供,即使什么都不做)
NTSTATUS MyEvtDeviceAdd(
_In_ WDFDRIVER Driver,
_Inout_ PWDFDEVICE_INIT DeviceInit
)
{
UNREFERENCED_PARAMETER(Driver);
UNREFERENCED_PARAMETER(DeviceInit);
KdPrint(("qi: KMDF DeviceAdd called\n"));
return STATUS_SUCCESS;
}

// KMDF 驱动入口函数
NTSTATUS DriverEntry(
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
WDF_DRIVER_CONFIG config;
NTSTATUS status;
KdPrint(("qi: KMDF DriverEntry\n"));

WDF_DRIVER_CONFIG_INIT(&config, MyEvtDeviceAdd);
config.EvtDriverUnload = MyEvtDriverUnload;

status = WdfDriverCreate(
DriverObject,
RegistryPath,
WDF_NO_OBJECT_ATTRIBUTES,
&config,
WDF_NO_HANDLE
);

if (!NT_SUCCESS(status)) {
KdPrint(("qi: WdfDriverCreate failed: 0x%x\n", status));
}

return status;
}