#pragma once #define _HIDPI_ #define _HIDPI_NO_FUNCTION_MACROS_ #define NDEBUG #include #include #include #include #include #include #include #include #include typedef struct { // // event for completion // KEVENT Event; // // device descriptor // PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; // // configuration descriptor // PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; // // interface information // PUSBD_INTERFACE_INFORMATION InterfaceInfo; // // configuration handle // USBD_CONFIGURATION_HANDLE ConfigurationHandle; // // hid descriptor // PHID_DESCRIPTOR HidDescriptor; } HID_USB_DEVICE_EXTENSION, *PHID_USB_DEVICE_EXTENSION; typedef struct { // // request irp // PIRP Irp; // // work item // PIO_WORKITEM WorkItem; // // device object // PDEVICE_OBJECT DeviceObject; } HID_USB_RESET_CONTEXT, *PHID_USB_RESET_CONTEXT; NTSTATUS Hid_GetDescriptor( IN PDEVICE_OBJECT DeviceObject, IN USHORT UrbFunction, IN USHORT UrbLength, IN OUT PVOID *UrbBuffer, IN OUT PULONG UrbBufferLength, IN UCHAR DescriptorType, IN UCHAR Index, IN USHORT LanguageIndex); NTSTATUS Hid_DispatchUrb( IN PDEVICE_OBJECT DeviceObject, IN PURB Urb); #define USB_SET_IDLE_REQUEST 0xA #define USB_GET_PROTOCOL_REQUEST 0x3 #define HIDUSB_TAG 'UdiH' #define HIDUSB_URB_TAG 'rUiH'