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.
VideoPortGetDeviceBase et VideoPortMapMemory peuvent tous deux être appelés par le pilote de miniport vidéo pour mapper la mémoire vidéo dans un espace d’adressage virtuel. Si vous appelez ces deux fonctions pour mapper les mêmes adresses physiques, ou si vous appelez l’une des fonctions plusieurs fois pour mapper les mêmes adresses physiques, vous pouvez avoir plusieurs plages d’adresses virtuelles qui correspondent à la même plage d’adresses physiques. Dans ce cas, vous devez définir l’indicateur VIDEO_MEMORY_SPACE_P6CACHE du paramètre InIoSpace sur la même valeur dans tous ces appels.

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

Voir aussi

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VideoPortCompareMemory

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortMoveMemory

VideoPortVerifyAccessRanges

VideoPortZeroDeviceMemory

VideoPortZeroMemory