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.
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 |