#pragma once #define _HIDPI_NO_FUNCTION_MACROS_ #include #include #include #include #include #include #include typedef struct { PDRIVER_OBJECT DriverObject; ULONG DeviceExtensionSize; BOOLEAN DevicesArePolled; PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; PDRIVER_ADD_DEVICE AddDevice; PDRIVER_UNLOAD DriverUnload; KSPIN_LOCK Lock; }HIDCLASS_DRIVER_EXTENSION, *PHIDCLASS_DRIVER_EXTENSION; typedef struct { // // hid device extension // HID_DEVICE_EXTENSION HidDeviceExtension; // // if it is a pdo // BOOLEAN IsFDO; // // driver extension // PHIDCLASS_DRIVER_EXTENSION DriverExtension; }HIDCLASS_COMMON_DEVICE_EXTENSION, *PHIDCLASS_COMMON_DEVICE_EXTENSION; typedef struct { // // parts shared by fdo and pdo // HIDCLASS_COMMON_DEVICE_EXTENSION Common; // // device capabilities // DEVICE_CAPABILITIES Capabilities; // // hid descriptor // HID_DESCRIPTOR HidDescriptor; // // hid attributes // HID_DEVICE_ATTRIBUTES Attributes; // // report descriptor // PUCHAR ReportDescriptor; // // device description // HIDP_DEVICE_DESC DeviceDescription; // // device relations // DEVICE_RELATIONS DeviceRelations; }HIDCLASS_FDO_EXTENSION, *PHIDCLASS_FDO_EXTENSION; typedef struct { // // parts shared by fdo and pdo // HIDCLASS_COMMON_DEVICE_EXTENSION Common; // // device descriptor // HID_DEVICE_ATTRIBUTES Attributes; // // device capabilities // DEVICE_CAPABILITIES Capabilities; // // device description // HIDP_DEVICE_DESC DeviceDescription; // // collection index // ULONG CollectionIndex; }HIDCLASS_PDO_DEVICE_EXTENSION, *PHIDCLASS_PDO_DEVICE_EXTENSION; /* fdo.c */ NTSTATUS HidClassFDO_PnP( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); NTSTATUS HidClassFDO_DispatchRequestSynchronous( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); /* pdo.c */ NTSTATUS HidClassPDO_CreatePDO( IN PDEVICE_OBJECT DeviceObject); NTSTATUS HidClassPDO_PnP( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); /* eof */