VideoPortGetDeviceBase-Funktion (video.h)

Die VideoPortGetDeviceBase-Funktion ordnet einen Bereich von busrelativem Gerätespeicher oder E/A-Adressen dem Systemraum zu.

Syntax

VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
  PVOID            HwDeviceExtension,
  PHYSICAL_ADDRESS IoAddress,
  ULONG            NumberOfUchars,
  UCHAR            InIoSpace
);

Parameter

HwDeviceExtension

Zeiger auf die Geräteerweiterung des Miniporttreibers.

IoAddress

Die physische Basisadresse des zu zuordnenden Bereichs. Sie erhalten diesen busrelativen Wert, indem Sie VideoPortGetDeviceData, VideoPortGetRegistryParameters oder VideoPortGetAccessRanges aufrufen. Andernfalls ist dieser Wert eine vom Treiber bereitgestellte Standard-Basisadresse für den Gerätespeicher oder E/A-Ports.

Sie müssen den von IoAddress und NumberOfUchars beschriebenen Bereich in der Registrierung über einen vorherigen Aufruf von VideoPortVerifyAccessRanges oder VideoPortGetAccessRanges erfolgreich beansprucht haben.

NumberOfUchars

Die Anzahl der Zuzuordnenden Bytes ab IoAddress.

InIoSpace

Der Speicherort des IoAddress-Bereichs . Dieser Parameter kann eines der folgenden Flags oder eine ORed-kompatible Kombination dieser Flags sein.

Kennzeichnen Bedeutung
VIDEO_MEMORY_SPACE_DENSE Veraltet.
VIDEO_MEMORY_SPACE_IO Der Adressbereich befindet sich im E/A-Bereich, nicht im Speicherplatz.
VIDEO_MEMORY_SPACE_MEMORY Der Adressbereich befindet sich im Arbeitsspeicher, nicht im E/A-Bereich.
VIDEO_MEMORY_SPACE_P6CACHE Der Prozessor aggregiert eine Sequenz von Schreibvorgängen, sendet sie an eine Cachezeile und löscht später den Cache. Dieses Flag ist nur dann sinnvoll, wenn VIDEO_MEMORY_SPACE_IO nicht festgelegt ist. Legt den Videospeicher als write-combined (WC) fest. Informationen zum WC-Zwischenspeichern finden Sie im Websiteartikel Schreibkombinierender Arbeitsspeicher in Video-Miniporttreibern .

Rückgabewert

Bei erfolgreicher Ausführung gibt VideoPortGetDeviceBase die virtuelle Basisadresse der Zuordnung zurück. Wenn der angegebene busrelative Bereich nicht zugeordnet werden kann, gibt VideoPortGetDeviceBaseNULL zurück.

Hinweise

Sie können die zugeordneten virtuellen Adressen an die Funktionen VideoPortReadXxx, VideoPortWriteXxx und VideoPortXxxMemory übergeben, mit Ausnahme von VideoPortMapMemory und VideoPortUnmapMemory.

Sie müssen VideoPortGetDeviceBase über die Funktion HwVidFindAdapter, HwVidQueryDeviceCallback oder HwVidQueryNamedValueCallback des Miniporttreibers aufrufen.

Bevor HwVidFindAdapter das Steuerelement zurückgibt, sollten Sie sowohl die zugeordnete Basisadresse, die von VideoPortGetDeviceBase zurückgegeben wird, als auch die Länge des zugeordneten Zugriffsbereichs in der Geräteerweiterung des Adapters (auf die von HwDeviceExtension verwiesen wird) zur späteren Verwendung speichern.

Der Zugriff auf den zugeordneten Adressraum muss den folgenden Regeln entsprechen:

  • Wenn InIoSpace VIDEO_MEMORY_SPACE_IO ist, was angibt, dass sich die Adresse im E/A-Bereich befindet, sollte die von dieser Funktion zurückgegebene virtuelle Adresse an die Funktionen VideoPortReadPortXxx, VideoPortWritePortXxx, VideoPortReadPortBufferXxx und VideoPortWritePortBufferXxx übergeben werden, wobei XxxUchar, Ushort oder Ulong ist.
  • Wenn InIoSpace VIDEO_MEMORY_SPACE_MEMORY ist, was angibt, dass sich die Adresse nicht im E/A-Bereich, sondern im Speicherplatz befindet, sollte die von dieser Funktion zurückgegebene virtuelle Adresse an die Funktionen VideoPortReadRegisterXxx, VideoPortWriteRegisterXxx, VideoPortReadRegisterBufferXxx und VideoPortWriteRegisterBuffer Xxx übergeben werden, wobei Xxxfür Uchar, Ushort oder Ulong steht.
  • Der Treiber darf nicht auf Adressen zugreifen, die sich außerhalb des durch NumberOfUchars getrennten Bereichs befinden.
VideoPortGetDeviceBase und VideoPortMapMemory können beide vom Videominiporttreiber aufgerufen werden, um den Videospeicher einem virtuellen Adressraum zuzuordnen. Wenn Sie beide Funktionen aufrufen, um dieselben physischen Adressen zuzuordnen, oder wenn Sie eine der Funktionen mehrmals aufrufen, um dieselben physischen Adressen zu zuordnen, verfügen Sie möglicherweise über mehrere virtuelle Adressbereiche, die demselben physischen Adressbereich zugeordnet sind. In diesem Fall müssen Sie das VIDEO_MEMORY_SPACE_P6CACHE Flag des InIoSpace-Parameters in allen aufrufen auf denselben Wert festlegen.

Jedes Uma-Anzeigegerät (Universal Memory Architecture) verwendet einen Framepuffer, der sich in Standard Arbeitsspeicher und nicht auf einem PCI-Bus befindet. Rufen Sie in diesem Fall VideoPortMapMemory nicht auf, um den Framepuffer zuzuordnen. Um einen UMA-Framepuffer dem Systemraum zuzuordnen, rufen Sie MmMapIoSpace auf.

Wenn ein Miniporttreiber keinen Adapter unterstützt, für den er einen logischen Bereich zugeordnet hat, muss er zwei Schritte ausführen, bevor er die Steuerung an die DriverEntry-Funktion zurückgibt: Rufen Sie VideoPortFreeDeviceBase auf, um die Zuordnung des zuvor zugeordneten Bereichs aus dem Systemraum aufzuheben, und rufen Sie VideoPortGetAccessRanges oder VideoPortVerifyAccessRanges auf, um seine Ansprüche für den Bereich in der Registrierung freizugeben.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows 2000 und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Desktop
Kopfzeile video.h (einschließen von Video.h)
Bibliothek Videoprt.lib
DLL Videoprt.sys
IRQL PASSIVE_LEVEL

Weitere Informationen

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VideoPortCompareMemory

VideoPortFreeDeviceBase

VideoPortGetAccessRanges

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortMoveMemory

VideoPortVerifyAccessRanges

VideoPortZeroDeviceMemory

VideoPortZeroMemory