创建硬件通知客户端驱动程序
本部分提供有关开发利用 Microsoft 提供的 KMDF 类扩展的硬件通知客户端驱动程序的一般指导。
为客户端驱动程序实现创建一个文件,该文件链接到 Mshwnclxstub.lib,并包含标头 hwn.h 和 hwnclx.h。
定义所需 KMDF 和硬件通知类扩展回调函数的实例。 具体而言,必须实现并注册这些回调函数,如以下示例代码所示。
DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD HwnClientEvtDeviceAdd; HWN_CLIENT_INITIALIZE_DEVICE HwnClientInitializeDevice; HWN_CLIENT_UNINITIALIZE_DEVICE HwnClientUnInitializeDevice; HWN_CLIENT_QUERY_DEVICE_INFORMATION HwnClientQueryDeviceInformation; HWN_CLIENT_START_DEVICE HwnClientStartDevice; HWN_CLIENT_STOP_DEVICE HwnClientStopDevice; HWN_CLIENT_SET_STATE HwnClientSetState; HWN_CLIENT_GET_STATE HwnClientGetState;
实现 DriverEntry 例程,该例程是客户端驱动程序入口点,负责初始化。 对于硬件通知客户端驱动程序,此函数应处理以下问题:
调用 WDF_DRIVER_CONFIG_INIT 以初始化驱动程序 的WDF_DRIVER_CONFIG 结构。
调用 WdfDriverCreate 为客户端驱动程序创建框架驱动程序对象。
定义 HWN_CLIENT_REGISTRATION_PACKET的内容,包括供类扩展使用的回调函数指针。 有关所需回调函数的详细信息,请参阅 硬件通知参考。
调用 HwNRegisterClient 以向 类扩展注册客户端驱动程序。
实现 EVT_WDF_DRIVER_DEVICE_ADD 函数,该函数负责在 PnP 管理器报告存在设备时执行设备初始化操作。 对于硬件通知客户端驱动程序,此函数应处理以下问题:
调用 HwNProcessAddDevicePreDeviceCreate,它提供 KMDF 将设备转换为不同状态所需的设备准备/释放和进入/退出回调。
调用 WdfDeviceCreate 以创建框架设备对象。
调用 HwNProcessAddDevicePostDeviceCreate 以创建 I/O 队列。
实现定义的 HWN_CLIENT_INITIALIZE_DEVICE 函数,该函数由类扩展调用,以准备硬件通知控制器以供使用。
实现定义的 HWN_CLIENT_UNINITIALIZE_DEVICE 函数,该函数由类扩展调用以取消初始化硬件通知控制器。
实现定义的 HWN_CLIENT_QUERY_DEVICE_INFORMATION 函数,该函数由类扩展调用。 此函数负责检索硬件通知组件的属性。
实现定义的 HWN_CLIENT_START_DEVICE 函数,该函数由类扩展调用。 此函数负责启动硬件通知控制器并为客户端驱动程序分配 ACPI 资源。
实现定义的 HWN_CLIENT_STOP_DEVICE 函数,该函数由类扩展调用。 此函数负责停止硬件通知控制器并释放客户端驱动程序使用的 ACPI 资源。
实现定义的 HWN_CLIENT_SET_STATE,由类扩展调用。 此函数负责设置硬件通知组件状态。
实现定义的 HWN_CLIENT_GET_STATE,由类扩展调用。 此函数负责获取硬件通知组件的当前值。 当输入缓冲区为 NULL 时,表示用户未指定特定的硬件通知状态,此函数应返回所有硬件通知组件的状态信息。