VideoPortGetDeviceBase, fonction (video.h)
La fonction VideoPortGetDeviceBase mappe une plage de mémoire d’appareil relative au bus ou d’adresses d’E/S dans l’espace système.
Syntaxe
VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS IoAddress,
ULONG NumberOfUchars,
UCHAR InIoSpace
);
Paramètres
HwDeviceExtension
Pointeur vers l’extension de périphérique du pilote miniport.
IoAddress
Adresse physique de base de la plage à mapper. Vous obtenez cette valeur relative de bus en appelant VideoPortGetDeviceData, VideoPortGetRegistryParameters ou VideoPortGetAccessRanges. Sinon, cette valeur est une adresse de base par défaut fournie par le pilote pour la mémoire du périphérique ou les ports d’E/S.
Vous devez avoir correctement revendiqué la plage décrite par IoAddress et NumberOfUchars dans le Registre via un appel précédent à VideoPortVerifyAccessRanges ou VideoPortGetAccessRanges.
NumberOfUchars
Nombre d’octets, à partir de IoAddress, à mapper.
InIoSpace
Emplacement de la plage IoAddress . Ce paramètre peut être l’un des indicateurs suivants ou une combinaison compatible ORed de ces indicateurs.
Indicateur | Signification |
---|---|
VIDEO_MEMORY_SPACE_DENSE | Obsolète. |
VIDEO_MEMORY_SPACE_IO | La plage d’adresses se trouve dans l’espace d’E/S, et non dans l’espace mémoire. |
VIDEO_MEMORY_SPACE_MEMORY | La plage d’adresses se trouve dans l’espace mémoire, et non dans l’espace d’E/S. |
VIDEO_MEMORY_SPACE_P6CACHE | Le processeur agrège une séquence d’opérations d’écriture, les envoie à une ligne de cache, puis vide le cache. Cet indicateur n’est significatif que lorsque VIDEO_MEMORY_SPACE_IO n’est pas défini. Désigne la mémoire vidéo en tant que mémoire combinée en écriture (WC). Pour plus d’informations sur la mise en cache de WC, consultez l’article du site web Write-Combining Memory in Video Miniport Drivers . |
Valeur retournée
En cas de réussite, VideoPortGetDeviceBase retourne l’adresse virtuelle de base du mappage. Si la plage relative du bus spécifiée ne peut pas être mappée, VideoPortGetDeviceBase retourne NULL.
Remarques
Vous pouvez passer les adresses virtuelles mappées aux fonctions VideoPortReadXxx, VideoPortWriteXxx et VideoPortXxxMemory , à l’exception de VideoPortMapMemory et VideoPortUnmapMemory.
Vous devez appeler VideoPortGetDeviceBase à partir des fonctions HwVidFindAdapter, HwVidQueryDeviceCallback ou HwVidQueryNamedValueCallback du pilote miniport.
Avant que HwVidFindAdapter retourne le contrôle, vous devez stocker l’adresse de base mappée retournée par VideoPortGetDeviceBase et la longueur de la plage d’accès mappée dans l’extension de périphérique de l’adaptateur (pointée par HwDeviceExtension) pour une utilisation ultérieure.
L’accès à l’espace d’adressage mappé doit suivre les règles suivantes :
- Si InIoSpace est VIDEO_MEMORY_SPACE_IO, ce qui indique que l’adresse se trouve dans l’espace d’E/S, l’adresse virtuelle retournée par cette fonction doit être passée aux fonctions VideoPortReadPortXxx, VideoPortWritePortXxx, VideoPortReadPortBufferXxx et VideoPortWritePortBufferXxx , où Xxx est Uchar, Ushort ou Ulong.
- Si InIoSpace est VIDEO_MEMORY_SPACE_MEMORY, ce qui indique que l’adresse n’est pas dans l’espace d’E/S, mais dans l’espace mémoire, l’adresse virtuelle retournée par cette fonction doit être passée aux fonctions VideoPortReadRegisterXxx, VideoPortWriteRegisterRegisterXxx, VideoPortReadRegisterBufferXxx et VideoPortWRegriteBufferXxx , où Xxx est Uchar, Ushort ou Ulong.
- Le pilote ne doit pas accéder aux adresses qui se trouvent en dehors de la plage délimitée par NumberOfUchars.
Chaque périphérique d’affichage UMA (Universal Memory Architecture) utilise une mémoire tampon de trame située dans main mémoire plutôt que sur un bus PCI. Dans ce cas, n’appelez pas VideoPortMapMemory pour mapper la mémoire tampon de trame. Pour mapper une mémoire tampon de trame UMA dans l’espace système, appelez MmMapIoSpace.
Si un pilote miniport ne prend pas en charge une carte pour laquelle il a mappé une plage logique, il doit effectuer deux étapes avant de retourner le contrôle à la fonction DriverEntry : appelez VideoPortFreeDeviceBase pour annuler le mappage de la plage précédemment mappée à partir de l’espace système, puis appelez VideoPortGetAccessRanges ou VideoPortVerifyAccessRanges pour libérer ses revendications sur la plage dans le Registre.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible dans Windows 2000 et versions ultérieures des systèmes d’exploitation Windows. |
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | video.h (incluez Video.h) |
Bibliothèque | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |