VideoPortSetTrappedEmulatorPorts-Funktion (video.h)

VGA-kompatible (SVGA)-Miniporttreiber rufen die VideoPortSetTrappedEmulatorPorts-Funktion auf, um die Liste der E/A-Ports dynamisch zu ändern, die eingeschlossen werden, wenn ein VDM (Videoanzeigemonitor) auf einem x86-basierten Computer im Vollbildmodus ausgeführt wird.

Syntax

VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortSetTrappedEmulatorPorts(
       PVOID               HwDeviceExtension,
       ULONG               NumAccessRanges,
  [in] PVIDEO_ACCESS_RANGE AccessRange
);

Parameter

HwDeviceExtension

Zeiger auf die Geräteerweiterung des Miniporttreibers.

NumAccessRanges

Gibt die Anzahl der Elemente im AccessRange-Array an.

[in] AccessRange

Zeiger auf ein Array von VIDEO_ACCESS_RANGE-Elementen . Jedes Element beschreibt einen ordnungsgemäßen Teilbereich der EmulatorAccessEntries , die der Miniporttreiber in VIDEO_PORT_CONFIG_INFO eingerichtet hat. Das Festlegen des RangeVisible-Elements eines AccessRange-Elements auf TRUE ermöglicht den direkten Zugriff auf den E/A-Portbereich durch die MS-DOS-Vollbildanwendung. Wenn Sie einen RangeVisible-Member auf FALSE festlegen, werden von der Anwendung ausgestellte INs, INSB/INSDs, OUTs und/oder OUTSB/OUTSW/OUTSDs an diesen Bereich erfasst und zur Überprüfung an die entsprechende Miniporttreiberfunktion SvgaHwIoPortXxx weitergeleitet.

Das an VideoPortSetTrappedEmulatorPorts übergebene AccessRange-Array muss eine ordnungsgemäße Teilmenge der E/A-Portbereiche sein, die die HwVidFindAdapter-Funktion im EmulatorAccessEntries-Array der VIDEO_PORT_CONFIG_INFO-Struktur eingerichtet hat. Alle E/A-Portbereiche im Zugriffsbereichsarray, die nicht im EmulatorAccessEntries-Array enthalten sind, werden erfasst und im Benutzermodus-VDD angezeigt.

Rückgabewert

VideoPortSetTrappedEmulatorPorts gibt NO_ERROR zurück, wenn die abgefangenen Ports erfolgreich geändert wurden. Andernfalls wird ERROR_INVALID_PARAMETER zurückgegeben.

Hinweise

Standardmäßig enthält accessRange von E/A-Ports, auf die Vollbild-MS-DOS-Anwendungen direkt zugreifen können, keine der Zugriffsbereichsarrayelemente, die E/A-Portbereiche beschreiben, die auch entsprechende Elemente im EmulatorAccessEntries-Array der VIDEO_PORT_CONFIG_INFO-Struktur enthalten. Das heißt, E/A-Portbereiche mit entsprechenden Emulatorzugriffseinträgen sind standardmäßig an die SvgaHwIoPortXxx-Funktionen des Miniporttreibers gebunden, sodass von der Anwendung ausgestellte Anweisungen zur Überprüfung an die Funktionen SvgaHwIoPortXxx weitergeleitet werden.

Ein VGA-kompatibler SVGA-Miniporttreiber kann E/A-Ports bei Bedarf mit Aufrufen von VideoPortSetTrappedEmulatorPorts aktivieren und deaktivieren. Durch aktivierte Portbereiche kann eine VOLLbild-MS-DOS-Anwendung direkt auf diese E/A-Ports zugreifen, ohne dass von der Anwendung ausgestellte Assemblyanweisungen erfasst und zur Überprüfung zuerst an die SvgaHwIoPortXxx-Funktionen des Miniporttreibers weitergeleitet werden. Der direkte E/A-Portzugriff für eine solche Anwendung bietet dem Benutzer schnellere Video-E/A-Antwortzeiten.

VideoPortSetTrappedEmulatorPorts überprüft das AccessRange-Parameterarray vom ersten bis zum letzten Element und aktiviert und deaktiviert E/A-Ports wie in jedem Element angegeben. Beachten Sie, dass ein Bereich von aktivierten Ports (das RangeVisible-Element auf TRUE festgelegt) im selben Aufruf wieder deaktiviert werden kann, wenn der Miniporttreiber eine doppelte Beschreibung desselben Bereichs enthält, wobei das RangeVisible-Element auf FALSE festgelegt ist. Beachten Sie auch, dass ein Miniporttreiber einen breiten Bereich von E/A-Ports im anfänglichen Element des AccessRange-Arrays aktivieren und Teilbereiche von Ports in nachfolgenden Arrayelementen selektiv deaktivieren kann, wenn VideoPortSetTrappedEmulatorPorts aufgerufen wird.

Alle Vollbild-MS-DOS-Anwendungen verwenden dieselbe IOPM-Zuordnung (E/A-Berechtigungszuordnung) auf x86-basierten Computern und daher denselben Satz aktivierter oder deaktivierter E/A-Ports. Bei jedem Wechsel zu einer solchen Vollbildanwendung wird die HwVidStartIO-Funktion des VGA-kompatiblen Miniporttreibers mit dem IOCTL_VIDEO_ENABLE_VDM VRP aufgerufen. Der Miniporttreiber sollte dann einen Standardsatz von direkt zugänglichen E/A-Ports erneut initialisieren, die alle Ports im EmulatorAccessEntries-Array enthalten können.

Während vollbildfähige MS-DOS-Anwendungen auf x86-basierten Computern direkten Zugriff auf die Videoports ermöglichen, werden anwendungsinitiierte Videovorgänge schneller, aber jeder VGA-kompatible SVGA-Miniporttreiber muss weiterhin eine Teilmenge kritischer E/A-Ports abfangen, um zu verhindern, dass eine solche Anwendung den Computer hängt. Insbesondere sollten solche Miniporttreiber immer Anwendungs-E/A an den VGA-kompatiblen Adaptersequenzer und verschiedene Ausgaberegister abfangen. Ein solcher Miniporttreiber sollte auch von der Anwendung ausgestellte direkte E/A abfangen und überprüfen, die dazu führen könnten, dass der Computer für zusätzliche adapterabhängige Teilmengen von E/A-Ports hängen bleibt.

Wenn VideoPortSetTrappedEmulatorPorts erneut aufgerufen und das RangeVisible-Element eines AccessRange-Elements auf FALSE zurückgesetzt wird, werden die von der Anwendung ausgestellten Anweisungen für diesen Bereich an die entsprechende SvgaHwIoPortXxx-Funktion des Miniporttreibers weitergeleitet.

Anforderungen

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

Weitere Informationen

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidStartIO

VIDEO_ACCESS_RANGE

VIDEO_PORT_CONFIG_INFO

VideoPortSynchronizeExecution