BSOne.SFC/Tocsg.Module/Bs1Flt/bs1flt/bs1flt_usb_desc.h

84 lines
3.2 KiB
C

#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;
typedef struct _USB_PARSED_INFO {
USB_DEVICE_DESCRIPTOR DeviceDesc;
PWCHAR ManufacturerStr;
PWCHAR ProductStr;
PWCHAR SerialNumberStr;
PUSB_CONFIGURATION_DESCRIPTOR ConfigDesc;
ULONG ConfigDescSize;
// -----------------------------------------
// 1. [CC 인증 요구사항] HID 상세 분류 플래그
// -----------------------------------------
BOOLEAN IsBootKeyboard; // 완벽한 표준 키보드 (SubClass 1, Protocol 1)
BOOLEAN IsBootMouse; // 완벽한 표준 마우스 (SubClass 1, Protocol 2)
BOOLEAN IsCustomHID; // 기타 커스텀 HID (SubClass 0, Protocol 0 - 바코드, 터치 등)
BOOLEAN IsAbnormalHID; // 스펙에 맞지 않는 비정상 HID
UCHAR OtherHidSubClass;
UCHAR OtherHidProtocol;
// -----------------------------------------
// 2. [매체 제어 요구사항] 주요 디바이스 클래스
// -----------------------------------------
BOOLEAN IsMassStorage; // 0x08: USB 메모리, 외장하드
BOOLEAN IsAudio; // 0x01: USB 스피커, 헤드셋
BOOLEAN IsPrinter; // 0x07: USB 프린터
BOOLEAN IsImageOrVideo; // 0x06 (Image), 0x0E (Video): 웹캠, 스마트폰 MTP 일부
BOOLEAN IsHub; // 0x09: USB 허브
BOOLEAN IsCDC; // 0x02: 통신 장치 (스마트폰 테더링, 가상 시리얼)
BOOLEAN IsCompositeDevice; // 복합 장치 여부
ULONG FoundClassCount; // 발견된 고유 인터페이스 개수
// -----------------------------------------
// 3. [안티 해킹] BadUSB 탐지용 카운터 및 플래그
// -----------------------------------------
ULONG TotalEndpoints; // 전체 엔드포인트 개수
ULONG InterruptEndpoints; // 인터럽트 엔드포인트 개수
ULONG BulkEndpoints; // 대용량 전송 엔드포인트 개수
BOOLEAN HasMixedEndpoints; // Bulk와 Interrupt가 섞여 있는지 여부 (구형 CheckBADUSB 아이디어)
BOOLEAN IsBadUSB; // 최종 BadUSB 확정 플래그 (TRUE면 차단)
// HID 부가 정보 보관용
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);
VOID PrintUsbParsedInfo(IN PUSB_PARSED_INFO pInfo);