Compartir a través de


Creación de minidrives HID de WDF

En este tema se describe cómo crear un minidriver de dispositivo de interfaz humana (HID) mediante Windows Driver Frameworks (WDF).

Puede escribir un minidriver HID mediante KMDF o UMDF. Se recomienda empezar con el ejemplo de minidriver vhidmini2. Puede compilar este controlador de ejemplo mediante KMDF o UMDF 2.x.

Qué proporcionar

  1. Escribirá un controlador de filtro inferior en MsHidUmdf.sys (para UMDF) o MsHidKmdf.sys (para KMDF), ambos incluidos como parte del sistema operativo.

  2. Descargue y revise el ejemplo vhidmini2.

  3. Llame a WdfFdoInitSetFilter desde la función de devolución de llamada EvtDriverDeviceAdd del controlador.

  4. Cree colas de E/S para recibir solicitudes de E/S que MsHidUmdf.sys o MsHidKmdf.sys pasen del controlador de clase al controlador.

  5. Proporcione una función de devolución de llamada EvtIoDeviceControl que se bifurque en controladores de métodos específicos de IOCTL. Revise las ITL descritas en IOPS de WDF HID Minidriver IOCTLs y asegúrese de que el controlador controla los correspondientes para el dispositivo.

  6. Para UMDF, si el controlador está enumerado por ACPI, opcionalmente habilite la suspensión selectiva. En la clave de hardware del dispositivo, agregue una subclave EnableDefaultIdleNotificationHandler y establézcala en 1.

  7. Para UMDF, establezca las siguientes directivas INF en una sección DDInstall específica de WDF del archivo INF:

    • UmdfKernelModeClientPolicy a AllowKernelModeClients para que el controlador de paso en modo kernel se pueda cargar en la pila.
    • UmdfMethodNeitherAction para copiar para permitir que UMDF procese ICTLs de METHOD_NEITHER tipo.
    • UmdfFileObjectPolicy para AllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicy a CanUseFsContext2

    Por ejemplo:

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

Si estás escribiendo un minidriver HID de UMDF para Windows 7, descarga Windows Driver Kit (WDK) 8.1 para obtener código fuente para HidUmdf.sys. A continuación, escriba un controlador UMDF 1.11 e incluya HidUmdf.sys y UMDF 1.11 en el paquete de controladores.

Architecture

El controlador de clase HID (HidClass.sys) y el marco proporcionan rutinas de envío de WDM en conflicto para controlar algunas solicitudes de E/S (como Plug and Play y solicitudes de administración de energía) para minidrivers. Como resultado, un minidriver HID no puede vincularse tanto al controlador de clase como al marco. Por lo tanto, Microsoft proporciona MsHidUmdf.sys y MsHidKmdf.sys, que son controladores WDM que residen entre el controlador de clase y el minidriver.

Tanto MsHidUmdf.sys como MsHidKmdf.sys llaman a la rutina HidRegisterMinidriver del controlador de clase HID para registrarse como el minidriver HID real. Aunque estos controladores actúan como el controlador de función del dispositivo, simplemente pasan solicitudes de E/S del controlador de clase al controlador (y, por tanto, se denominan controladores de paso a través). Para KMDF y UMDF, el único componente que proporcione es el minidriver HID, que es un controlador de filtro inferior que se encuentra bajo el controlador de paso a través.

Arquitectura de UMDF: arquitectura de KMDF

Diagrama que muestra la ubicación de hidumdf.sys en la pila de controladores.

Diagrama que muestra la ubicación de mshidkmdf.sys en la pila de controladores.