Ricerca e mappatura delle risorse hardware
Questo argomento descrive come un driver Kernel-Mode Driver Framework (KMDF) o User-Mode Driver Framework (UMDF) a partire dalla versione 2 mappa una risorsa di memoria tradotta (CmResourceTypeMemory) che riceve nella funzione di callback EvtDevicePrepareHardware.
Un driver UMDF 1.x può anche ricevere questo tipo di risorsa nel relativo metodo IPnpCallbackHardware2::OnPrepareHardware. Per ulteriori informazioni, consultare Ricerca e mappatura delle risorse hardware nei driver UMDF 1.x.
Il driver riceve versioni non elaborate e tradotte delle risorse hardware nell'elenco delle risorse del dispositivo all'interno della appropriata funzione di callback EvtDevicePrepareHardware. Il driver può salvare l'elenco di risorse, valido fino a quando il framework non chiama la funzione di callback EvtDeviceReleaseHardware .
In genere, il driver chiama WdfCmResourceListGetCount dalla relativa EvtDevicePrepareHardware funzione di callback per determinare il numero di descrittori di risorse nell'elenco di risorse tradotte e quindi chiama WdfCmResourceListGetDescriptor in un ciclo per identificare i registri mappati alla memoria, le porte di I/O e gli interrupt.
Se a un driver viene assegnata una risorsa di memoria tradotta (CmResourceTypeMemory), deve eseguire il mapping dell'indirizzo fisico in un indirizzo tramite il quale può accedere ai registri dei dispositivi.
Un driver KMDF chiama MmMapIoSpace per eseguire il mapping dell'intervallo di indirizzi fisici specificato allo spazio di sistema non paginato. Usa quindi le routine della libreria HAL per leggere e scrivere nei registri.
Un driver UMDF chiama WdfDeviceMapIoSpace per eseguire il mapping dell'indirizzo fisico a uno pseudo indirizzo di base che può essere usato in combinazione con funzioni di registrazione/accesso alle porte WDF per leggere e scrivere in registri e porte.
Il driver annulla il mapping delle risorse chiamando MmUnmapIoSpace o WdfDeviceUnmapIoSpace dalla funzione di callback EvtDeviceReleaseHardware.
Non è necessario eseguire il mapping delle risorse nello spazio di I/O (CmResourceTypePort, CmResourceTypeInterrupt, CmResourceTypeDma).
Se il driver UMDF chiama WdfDeviceMapIoSpace, è necessario impostare la direttiva UmdfDirectHardwareAccess INF su AllowDirectHardwareAccess.
Per un esempio che mostra come un driver trova ed esegue il mapping delle risorse di registrazione mappate alla memoria, vedere Lettura e scrittura nei registri dei dispositivi.