Condividi tramite


Ricerca e mapping delle risorse hardware

Questo argomento descrive in che modo un driver Kernel-Mode Driver Framework (KMDF) o User-Mode Driver Framework (UMDF) a partire dalla versione 2 esegue il mapping di una risorsa di memoria tradotta (CmResourceTypeMemory) che riceve nella relativa funzione di callback EvtDevicePrepareHardware .

Un driver UMDF 1.x può anche ricevere questo tipo di risorsa nel metodo IPnpCallbackHardware2::OnPrepareHardware . Per altre informazioni, vedi Ricerca e mapping 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 nella relativa 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 del driver.

In genere, il driver chiama WdfCmResourceListGetCount dalla relativa funzione di callback EvtDevicePrepareHardware per determinare il numero di descrittori di risorse nell'elenco di risorse tradotti e quindi chiama WdfCmResourceListGetDescriptor in un ciclo per identificare registri mappati alla memoria, porte di I/O e 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 fisico specificato allo spazio di sistema non di pag. 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 alla porta WDF per leggere e scrivere per registrare 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 INF UmdfDirectHardwareAccess su AllowDirectHardwareAccess.

Per un esempio che mostra come un driver trova e mappa le risorse di registro mappate alla memoria, vedere Lettura e scrittura nei registri dei dispositivi.