Recherche et mappage des ressources matérielles

Cette rubrique décrit comment un pilote KMDF (Kernel-Mode Driver Framework) ou User-Mode Pilote Framework (UMDF) à partir de la version 2 mappe une ressource de mémoire traduite (CmResourceTypeMemory) qu’il reçoit dans sa fonction de rappel EvtDevicePrepareHardware .

Un pilote UMDF 1.x peut également recevoir ce type de ressource dans sa méthode IPnpCallbackHardware2::OnPrepareHardware . Pour plus d’informations, consultez Recherche et mappage de ressources matérielles dans les pilotes UMDF 1.x.

Votre pilote reçoit des versions brutes et traduites des ressources matérielles dans la liste des ressources de l’appareil dans sa fonction de rappel EvtDevicePrepareHardware . Le pilote peut enregistrer la liste des ressources, qui est valide jusqu’à ce que le framework appelle la fonction de rappel EvtDeviceReleaseHardware du pilote.

En règle générale, le pilote appelle WdfCmResourceListGetCount à partir de sa fonction de rappel EvtDevicePrepareHardware pour déterminer le nombre de descripteurs de ressources dans la liste de ressources traduite, puis appelle WdfCmResourceListGetDescriptor dans une boucle pour identifier les registres mappés en mémoire, les ports d’E/S et les interruptions.

Si un pilote se voit attribuer une ressource de mémoire traduite (CmResourceTypeMemory), il doit mapper l’adresse physique à une adresse par le biais de laquelle il peut accéder aux registres d’appareils.

Un pilote KMDF appelle MmMapIoSpace pour mapper la plage d’adresses physique donnée à l’espace système non paginé. Ensuite, il utilise les routines de bibliothèque HAL pour lire et écrire dans les registres.

Un pilote UMDF appelle WdfDeviceMapIoSpace pour mapper l’adresse physique à une pseudo adresse de base qu’il peut utiliser conjointement avec les fonctions d’accès au registre/port WDF pour lire et écrire dans les registres et les ports.

Le pilote annule le mappage des ressources en appelant MmUnmapIoSpace ou WdfDeviceUnmapIoSpace à partir de sa fonction de rappel EvtDeviceReleaseHardware .

Vous n’avez pas besoin de mapper les ressources dans l’espace d’E/S (CmResourceTypePort, CmResourceTypeInterrupt, CmResourceTypeDma).

Si votre pilote UMDF appelle WdfDeviceMapIoSpace, vous devez définir la directive INF UmdfDirectHardwareAccess sur AllowDirectHardwareAccess.

Pour obtenir un exemple montrant comment un pilote recherche et mappe des ressources de registre mappées en mémoire, consultez Lecture et écriture dans les registres d’appareils.