Ressources brutes et traduites
Quand la fonction de rappel EvtDeviceRemoveAddedResources ou EvtDevicePrepareHardware d’un pilote reçoit une liste de ressources, elle reçoit deux versions de la liste. Une version représente les ressources brutes de l’appareil, et l’autre représente les ressources traduites de l’appareil. Les deux versions représentent le même ensemble de ressources matérielles, dans le même ordre.
Les ressources brutes sont des ressources identifiées par des adresses relatives au bus auquel l’appareil est connecté. En règle générale, le pilote qui programme l’appareil fournit ces adresses à l’appareil.
Les ressources traduites sont des ressources identifiées par des adresses physiques système que les pilotes utilisent pour accéder aux ressources.
Un pilote pour un périphérique de bus PCI reçoit les ressources répertoriées dans l’ordre dans lequel elles apparaissent dans les registres d’adresses de base (BAR) de l’appareil. Toutefois, des descripteurs de ressources supplémentaires peuvent être entrelacés dans la liste, de sorte que la ressource à l’index X dans le BAR peut ne pas correspondre à la ressource à la même position d’index dans la liste de ressources.
Pour plus d’informations sur les ressources brutes et traduites, consultez les descriptions des membres de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR .
Si la liste de ressources traduites d’un appareil contient une ressource avec le membre Type de la structure CM_PARTIAL_RESOURCE_DESCRIPTOR défini sur CmResourceTypeMemory, chaque pilote qui accède à cette ressource doit effectuer les opérations suivantes :
- La fonction de rappel EvtDevicePrepareHardware du pilote doit appeler MmMapIoSpace pour mapper les adresses physiques système aux adresses virtuelles système.
- La fonction de rappel EvtDeviceReleaseHardware du pilote doit appeler MmUnmapIoSpace pour annuler le mappage des adresses.
Pour plus d’informations sur le mappage d’adresses relatives de bus, consultez Mappage d’adresses Bus-Relative à des adresses virtuelles.