Freigeben über


VideoPortGetDeviceBase-Funktion (video.h)

Die VideoPortGetDeviceBase--Funktion ordnet eine Reihe von busrelativen Gerätespeicher- oder E/A-Adressen dem Systembereich zu.

Syntax

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

Parameter

HwDeviceExtension

Zeigen Sie auf die Geräteerweiterung des Miniporttreibers.

IoAddress

Die physische Basisadresse des bereichs, der zugeordnet werden soll. Sie erhalten diesen busrelativen Wert, indem Sie VideoPortGetDeviceData, VideoPortGetRegistryParametersoder VideoPortGetAccessRangesaufrufen. Andernfalls handelt es sich bei diesem Wert um eine vom Treiber bereitgestellte Standardbasisadresse für den Gerätespeicher oder E/A-Ports.

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

NumberOfUchars

Die Anzahl der Bytes, beginnend bei IoAddress, zuzuordnen.

InIoSpace

Die Position des IoAddress Bereichs. Dieser Parameter kann eine der folgenden Flags oder eine kompatible Kombination dieser Flags sein.

Kennzeichnung Bedeutung
VIDEO_MEMORY_SPACE_DENSE Obsolet.
VIDEO_MEMORY_SPACE_IO Der Adressbereich befindet sich im E/A-Bereich, nicht im Arbeitsspeicher.
VIDEO_MEMORY_SPACE_MEMORY Der Adressbereich befindet sich im Arbeitsspeicher, nicht im E/A-Bereich.
VIDEO_MEMORY_SPACE_P6CACHE Der Prozessor aggregiert eine Abfolge von Schreibvorgängen, sendet sie an eine Cachezeile und löscht den Cache später. Dieses Kennzeichen ist nur dann sinnvoll, wenn VIDEO_MEMORY_SPACE_IO nicht festgelegt ist. Legt den Videospeicher als "write-combined" (WC) fest. Informationen zur WC-Zwischenspeicherung finden Sie im Artikel zum Write-Combining Speicher in Video-Miniporttreibern Websiteartikel.

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 VideoPortGetDeviceBase-NULL-zurück.

Bemerkungen

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

Sie müssen VideoPortGetDeviceBase- aus dem HwVidFindAdapter-des Miniporttreibers , HwVidQueryDeviceCallback-oder HwVidQueryNamedValueCallback-Funktion aufrufen.

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

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

  • Wenn InIoSpace VIDEO_MEMORY_SPACE_IO ist, gibt an, dass sich die Adresse im E/A-Bereich befindet, die virtuelle Adresse, die diese Funktion zurückgibt, an die VideoPortReadPortXxx, VideoPortWritePortXxx, VideoPortReadPortBufferXxxund VideoPortWritePortBufferXxx Funktionen, wobei Xxx-Uchar-, Ushort-oder Ulong-ist.
  • Wenn InIoSpace- VIDEO_MEMORY_SPACE_MEMORY ist, was angibt, dass sich die Adresse nicht im E/A-Bereich, sondern im Arbeitsspeicher befindet, die virtuelle Adresse, die diese Funktion zurückgibt, sollte an die VideoPortReadRegisterXxx, VideoPortWriteRegisterXxx, VideoPortReadRegisterBufferXxxund VideoPortWriteRegisterBufferXxx Funktionen übergeben werden, wobei Xxx-Uchar-, Ushort-oder Ulong-ist.
  • Der Treiber darf nicht auf Adressen zugreifen, die sich außerhalb des Bereichs befinden, der durch NumberOfUchars-getrennt ist.
VideoPortGetDeviceBase und VideoPortMapMemory- können beide vom Videominiporttreiber aufgerufen werden, um Videospeicher in einen virtuellen Adressraum zuzuordnen. Wenn Sie beide Funktionen aufrufen, um die gleichen physischen Adressen zuzuordnen, oder wenn Sie eine der Funktionen mehrmals aufrufen, um die gleichen physischen Adressen zuzuordnen, 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 auf denselben Wert in allen diesen Aufrufen festlegen.

Jedes UMA-Anzeigegerät (Universal Memory Architecture) verwendet einen Framepuffer, der sich im Hauptspeicher und nicht auf einem PCI-Bus befindet. Rufen Sie in diesem Fall nicht VideoPortMapMemory- auf, um den Framepuffer zuzuordnen. Rufen Sie MmMapIoSpaceauf, um einen UMA-Framepuffer in Systemraum zuzuordnen.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows 2000 und höheren Versionen von Windows-Betriebssystemen.
Zielplattform- Desktop
Header- video.h (video.h einschließen)
Library Videoprt.lib
DLL- Videoprt.sys
IRQL- PASSIVE_LEVEL

Siehe auch

HwVidFindAdapter

HwVidQueryDeviceCallback-

HwVidQueryNamedValueCallback-

VideoPortCompareMemory-

VideoPortFreeDeviceBase-

VideoPortGetAccessRanges-

VideoPortGetDeviceData-

VideoPortGetRegistryParameters

VideoPortMoveMemory

VideoPortVerifyAccessRanges

VideoPortZeroDeviceMemory

VideoPortZeroMemory-