Creazione di minidriver HID WDF
Questo argomento descrive come creare un minidriver HID (Human Interface Device) usando Windows Driver Framework (WDF).
È possibile scrivere un minidriver HID usando KMDF o UMDF. È consigliabile iniziare con l'esempio di minidriver vhidmini2. È possibile compilare questo driver di esempio usando KMDF o UMDF 2.x.
Cosa fornire
Si scriverà un driver di filtro inferiore in MsHidUmdf.sys (per UMDF) o MsHidKmdf.sys (per KMDF), entrambi inclusi come parte del sistema operativo.
Scaricare ed esaminare l'esempio vhidmini2.
Chiamare WdfFdoInitSetFilter dalla funzione di callback EvtDriverDeviceAdd del driver.
Creare code di I/O per ricevere richieste di I/O che MsHidUmdf.sys o MsHidKmdf.sys passare dal driver di classe al driver.
Fornire una funzione di callback EvtIoDeviceControl che rami ai gestori di metodi specifici di IOCTL. Esaminare i IOCTLs descritti in IOCTr IOCTr HID di WDF e assicurarsi che il driver gestisca quelli pertinenti per il dispositivo.
Per UMDF, se il driver è enumerato da ACPI, facoltativamente abilitare la sospensione selettiva. Nella chiave hardware del dispositivo aggiungere una sottochiave EnableDefaultIdleNotificationHandler e impostarla su 1.
Per UMDF, impostare le direttive INF seguenti in una sezione DDInstall specifica di WDF del file INF:
- UmdfKernelModeClientPolicy to AllowKernelModeClients in modo che il driver pass-through in modalità kernel possa essere caricato nello stack.
- UmdfMethodNeitherAction da copiare per consentire a UMDF di elaborare IOCTLs di METHOD_NEITHER tipo.
- UmdfFileObjectPolicy to AllowNullAndUnknownFileObjects
- UmdfFsContextUsePolicy in CanUseFsContext2
Ad esempio:
[hidumdf.NT.Wdf] UmdfKernelModeClientPolicy = AllowKernelModeClients UmdfMethodNeitherAction=Copy UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects UmdfFsContextUsePolicy = CanUseFsContext2
Se si scrive un minidriver HID UMDF per Windows 7, scaricare Windows Driver Kit (WDK) 8.1 per ottenere il codice sorgente per HidUmdf.sys. Scrivere quindi un driver UMDF 1.11 e includere HidUmdf.sys e UMDF 1.11 nel pacchetto driver.
Architettura
Il driver di classe HID (HidClass.sys) e il framework forniscono routine di invio WDM in conflitto per gestire alcune richieste di I/O (ad esempio Plug and Play e richieste di risparmio energia) per i minidriver. Di conseguenza, un minidriver HID non può collegarsi sia al driver di classe che al framework. Microsoft fornisce pertanto MsHidUmdf.sys e MsHidKmdf.sys, che sono driver WDM che risiedono tra il driver di classe e il minidriver.
Sia MsHidUmdf.sysche MsHidKmdf.sys chiamare la routine HidRegisterMinidriver del driver di classe HID per registrarsi come minidriver HID effettivo. Anche se questi driver fungono da driver di funzione del dispositivo, passano solo le richieste di I/O dal driver di classe al driver (e quindi vengono talvolta chiamati driver pass-through). Sia per KMDF che per UMDF, l'unico componente fornito è il minidriver HID, che è un driver di filtro inferiore che si trova sotto il driver pass-through.
Architettura UMDF: architettura KMDF