HID 보고서 보내기

이 섹션에서는 사용자 모드 애플리케이션 및 커널 모드 드라이버가 HID 보고서를 HID 컬렉션으로 보내는 방법을 설명합니다.

User-Mode 애플리케이션으로 HID 보고서 보내기

사용자 모드 애플리케이션은 출력 보고서를 HID 컬렉션에 지속적으로 보내려면 기본 접근 방법으로 WriteFile을 사용해야 합니다. 애플리케이션은 HidD_SetXxx 루틴을 사용하여 출력 보고서 및 기능 보고서를 컬렉션에 보낼 수도 있습니다. 그러나 애플리케이션은 이러한 루틴만 사용하여 컬렉션의 현재 상태를 설정해야 합니다. 일부 디바이스는 HidD_SetOutputReport 지원하지 않을 수 있으며 이 루틴을 사용하는 경우 응답하지 않습니다.

WriteFile 사용

애플리케이션은 쓰기 요청을 사용하여 HID 컬렉션에 출력 보고서를 보내야 합니다. 사용자 모드 애플리케이션이 출력 보고서를 만든 후에는 WriteFile을 사용하여 컬렉션에 출력 보고서를 보낼 수 있습니다.

HidD_SetXxx 루틴 사용

애플리케이션은 다음 HIDClass 지원 루틴을 사용하여 HID 보고서를 HID 컬렉션으로 보낼 수 있습니다.

HidD_SetOutputReport 출력 보고서를 HID 컬렉션(Windows XP 이상 버전)으로 보냅니다.

HidD_SetFeature HID 컬렉션에 기능 보고서를 보냅니다.

Kernel-Mode 드라이버로 HID 보고서 보내기

커널 모드 드라이버는 IRP_MJ_WRITE 요청을 기본 접근 방법으로 사용하여 출력 보고서를 HID 컬렉션으로 지속적으로 보내야 합니다. 드라이버는 IOCTL_HID_SET_Xxx 요청을 사용하여 출력 보고서 및 기능 보고서를 컬렉션에 보낼 수도 있습니다. 그러나 드라이버는 이러한 I/O 요청만 사용하여 컬렉션의 현재 상태를 설정해야 합니다. 일부 디바이스는 IOCTL_HID_SET_OUTPUT_REPORT 지원하지 않을 수 있으며 이 요청을 사용하는 경우 응답하지 않습니다.

IRP_MJ_WRITE 요청 사용

비 WDM Windows 2000 드라이버 및 Windows XP 이상 버전용 드라이버는 컬렉션에 전송된 모든 쓰기 요청에 단일 IRP를 사용할 수 있습니다. 그러나 Windows 2000 WDM 드라이버는 각 쓰기 요청에 대해 새 IRP를 할당해야 합니다. IRP를 사용하고 다시 사용하는 방법에 대한 자세한 내용은 IRP 처리IRP 재사용을 참조하세요.

드라이버가 쓰기 IRP를 다시 사용하는 경우 IRP의 IoCompletion 루틴은 IRP를 해제하지 않고 STATUS_MORE_PROCESSING_REQUIRED 상태 요청을 완료해야 합니다. 드라이버에 더 이상 IRP가 필요하지 않은 경우 IoCompleteRequestIoFreeIrp을 호출하여 IRP를 완료하고 해제해야 합니다. 예를 들어 드라이버는 일반적으로 언로드 루틴에서 또는 디바이스가 제거된 후 IRP를 완료하고 해제할 수 있습니다.

드라이버가 하나의 쓰기 요청에만 IRP를 사용하는 경우 IRP의 IoCompletion 루틴은 IRP를 완료하고 해제하고 STATUS_SUCCESS 반환해야 합니다.

출력 보고서를 보내기 전에 드라이버는 HID 보고서 초기화에 설명된 대로 먼저 출력 보고서 버퍼 를 초기화하고 설정해야 합니다. 그런 다음 드라이버는 MDL을 사용하여 쓰기 요청에 대한 출력 보고서 버퍼를 매핑해야 합니다. 드라이버는 IoAllocateMdl을 호출하여 출력 보고서에 MDL을 할당하고 쓰기 IRP의 Irp-MdlAddress> 멤버를 출력 보고서 버퍼의 MDL 주소로 설정합니다. 드라이버는 더 이상 필요하지 않은 경우 보고서 버퍼와 MDL을 해제해야 합니다.

쓰기 IRP의 MDL 주소를 설정하는 것 외에도 드라이버는 다음 하위 수준 드라이버의 I/O 스택 위치도 설정해야 합니다. 드라이버는 IoGetNextIrpStackLocation을 호출하여 다음 하위 수준 드라이버의 I/O 스택 위치에 액세스할 수 있습니다. 드라이버는 I/O 스택 위치의 다음 멤버를 설정합니다.

Parameters.Write.Length
출력 보고서의 길이(바이트)로 설정합니다. 컬렉션의 HIDP_CAPS 구조체의 OutputReportByteLength 멤버에 지정된 대로 HID 컬렉션의 출력 보고서 길이로 설정해야 합니다.

Parameters.Write.Key
0으로 설정됩니다.

Parameters.Write.ByteOffset.QuadPart
0으로 설정됩니다.

MajorFunction
를 IRP_MJ_WRITE.

FileObject
HID 컬렉션의 열린 파일을 나타내는 파일 개체 포인터로 설정합니다.

IOCTL_HID_SET_Xxx 요청 사용

드라이버는 다음 I/O 요청을 사용하여 출력 및 기능 보고서를 HID 컬렉션에 보낼 수도 있습니다.

IOCTL_HID_SET_OUTPUT_REPORT
출력 보고서를 컬렉션(Windows XP 이상 버전)에 보냅니다.

IOCTL_HID_SET_FEATURE
컬렉션에 기능 보고서를 보냅니다.