#include "usb.h" #include "usbioctl.h" #include "Usbdlib.h" #pragma once // HID Descriptor ŸÀÔ Á¤ÀÇ (USB Ç¥ÁØ) #define USB_DESCRIPTOR_TYPE_HID 0x21 #define MAX_HID_INTERFACES 8 // HID Descriptor ±¸Á¶Ã¼ Á¤ÀÇ #pragma pack(push, 1) typedef struct _USB_HID_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; // 0x21 USHORT bcdHID; // HID Spec Version (e.g., 0x0111 for 1.11) UCHAR bCountryCode; UCHAR bNumDescriptors; // Number of class descriptors (usually 1 for Report Desc) struct { UCHAR bDescriptorType; // Report Descriptor Type (0x22) USHORT wDescriptorLength; // Report Descriptor Length } DescriptorList[1]; } USB_HID_DESCRIPTOR, * PUSB_HID_DESCRIPTOR; #pragma pack(pop) typedef struct _HID_INTERFACE_ENTRY { UCHAR InterfaceNumber; // ÇØ´ç HID°¡ ¼ÓÇÑ ÀÎÅÍÆäÀ̽º ¹øÈ£ PUSB_HID_DESCRIPTOR HidDesc; // HID Descriptor Æ÷ÀÎÅÍ (ConfigDesc ³»ºÎ À§Ä¡) } HID_INTERFACE_ENTRY, * PHID_INTERFACE_ENTRY; // USB Á¤º¸¸¦ ´ãÀ» ±¸Á¶Ã¼ Á¤ÀÇ typedef struct _USB_PARSED_INFO { // 1. Device Descriptor (VendorID, ProductID µî) USB_DEVICE_DESCRIPTOR DeviceDesc; // 2. String Descriptors (»ç¶÷ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ¹®ÀÚ¿­) PWCHAR ManufacturerStr; // Á¦Á¶»ç (NULLÀÏ ¼ö ÀÖÀ½) PWCHAR ProductStr; // Á¦Ç°¸í (NULLÀÏ ¼ö ÀÖÀ½) PWCHAR SerialNumberStr; // ½Ã¸®¾ó ¹øÈ£ (NULLÀÏ ¼ö ÀÖÀ½) // 3. Configuration Descriptor (Interface, Endpoint Æ÷ÇÔµÈ Àüü Blob) PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc; ULONG ConfigDescSize; ULONG HidInterfaceCount; HID_INTERFACE_ENTRY HidEntries[MAX_HID_INTERFACES]; } USB_PARSED_INFO, * PUSB_PARSED_INFO; // ÇÔ¼ö ¿øÇü ¼±¾ð NTSTATUS CollectUsbDeviceInfo(IN PDEVICE_OBJECT DeviceObject, OUT PUSB_PARSED_INFO* ppInfo); VOID FreeUsbDeviceInfo(IN PUSB_PARSED_INFO pInfo);