다음을 통해 공유


WDF HID 미니드라이버 만들기

이 항목에서는 WDF(Windows 드라이버 프레임워크)를 사용하여 HID(휴먼 인터페이스 디바이스) 미니드라이버를 만드는 방법을 설명합니다.

KMDF 또는 UMDF를 사용하여 HID 미니드라이버를 작성할 수 있습니다. vhidmini2 미니드라이버 샘플부터 시작하는 것이 좋습니다. KMDF 또는 UMDF 2.x를 사용하여 이 샘플 드라이버를 컴파일할 수 있습니다.

제공할 내용

  1. MsHidUmdf.sys (UMDF의 경우) 또는 MsHidKmdf.sys (KMDF의 경우)에 더 낮은 필터 드라이버를 작성합니다. 둘 다 운영 체제의 일부로 포함됩니다.

  2. vhidmini2 샘플을 다운로드하고 검토합니다.

  3. 드라이버의 EvtDriverDeviceAdd 콜백 함수에서 WdfFdoInitSetFilter를 호출합니다.

  4. 클래스 드라이버에서 드라이버로MsHidUmdf.sys또는 MsHidKmdf.sys 전달하는 I/O 요청을 수신하는 I/O 큐 를 만듭니다.

  5. IOCTL 관련 메서드 처리기로 분기하는 EvtIoDeviceControl 콜백 함수를 제공합니다. WDF HID Minidriver IOCTL에 설명된 IOCTL을 검토하고 드라이버가 장치에 대한 관련 IOCTL을 처리하는지 확인합니다.

  6. UMDF의 경우 드라이버가 ACPI로 열거되는 경우 선택적으로 선택적 일시 중단을 사용하도록 설정합니다. 디바이스의 하드웨어 키에서 EnableDefaultIdleNotificationHandler 하위 키를 추가하고 1로 설정합니다.

  7. UMDF의 경우 INF 파일의 WDF별 DDInstall 섹션에서 다음 INF 지시문을 설정합니다.

    • 커널 모드 통과 드라이버를 스택에 로드할 수 있도록 AllowKernelModeClients에 대한 UmdfKernelModeClientPolicy입니다.
    • UMDF가 METHOD_NEITHER 유형의 IOCTL을 처리할 수 있도록 복사UmdfMethodNeitherAction입니다.
    • UmdfFileObjectPolicy에서 AllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicy 에서 CanUseFsContext2로

    예:

    [hidumdf.NT.Wdf]
    UmdfKernelModeClientPolicy = AllowKernelModeClients
    UmdfMethodNeitherAction=Copy
    UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
    UmdfFsContextUsePolicy = CanUseFsContext2
    

Windows 7용 UMDF HID 미니드라이버를 작성하는 경우 WDK(Windows 드라이버 키트) 8.1 을 다운로드하여 HidUmdf.sys소스 코드를 가져옵니다. 그런 다음, UMDF 1.11 드라이버를 작성하고 드라이버 패키지에 HidUmdf.sys 및 UMDF 1.11을 포함합니다.

아키텍처

HID 클래스 드라이버(HidClass.sys) 및 프레임워크는 미니드라이버에 대한 일부 I/O 요청(예: 플러그 앤 플레이 및 전원 관리 요청)을 처리하기 위해 충돌하는 WDM 디스패치 루틴을 제공합니다. 따라서 HID 미니드라이버가 클래스 드라이버와 프레임워크 모두에 연결할 수 없습니다. 따라서 Microsoft는 클래스 드라이버와 미니드라이버 사이에 있는 WDM 드라이버인 MsHidUmdf.sys및MsHidKmdf.sys제공합니다.

MsHidUmdf.sysMsHidKmdf.sys 모두 HID 클래스 드라이버의 HidRegisterMinidriver 루틴을 호출하여 실제 HID 미니드라이버로 등록합니다. 이러한 드라이버는 디바이스의 함수 드라이버 역할을 하지만 클래스 드라이버에서 드라이버로 I/O 요청을 전달합니다(따라서 통과 드라이버라고도 함). KMDF와 UMDF 모두에 대해 제공하는 유일한 구성 요소는 통과 드라이버 아래에 있는 하위 필터 드라이버인 HID 미니드라이버입니다.

UMDF 아키텍처: KMDF 아키텍처

드라이버 스택에서 hidumdf.sys 위치를 보여 주는 다이어그램

드라이버 스택에서 mshidkmdf.sys 위치를 보여 주는 다이어그램