Freigeben über


VIDEO_ACCESS_RANGE Struktur (video.h)

Die VIDEO_ACCESS_RANGE-Struktur definiert einen Geräte-E/A-Anschluss oder einen Speicherbereich für den Grafikkarten. Jede HwVidFindAdapter--Funktion des Miniporttreibers muss ein Array VIDEO_ACCESS_RANGE Typelemente einrichten, das als Access Ranges Arraybezeichnet wird, für jeden Videoadapter, den der Miniporttreiber unterstützt.

Für VGA-kompatible Miniporttreiber definiert VIDEO_ACCESS_RANGE auch ein Element in einem Array, das an VideoPortSetTrappedEmulatorPorts übergeben wird, um den direkten Zugriff auf E/A-Ports durch Vollbild-MS-DOS Anwendungen zu aktivieren oder zu deaktivieren.

Syntax

typedef struct _VIDEO_ACCESS_RANGE {
  PHYSICAL_ADDRESS RangeStart;
  ULONG            RangeLength;
  UCHAR            RangeInIoSpace;
  UCHAR            RangeVisible;
  UCHAR            RangeShareable;
  UCHAR            RangePassive;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;

Angehörige

RangeStart

Gibt die busrelative Basisadresse eines Speicher- oder E/A-Portbereichs für ein Element im Zugriffsbereichsarray an, das an VideoPortVerifyAccessRanges oder von VideoPortGetAccessRangesübergeben wird.

Gibt die busrelative Basisadresse eines E/A-Portbereichs an, damit ein Array an VideoPortSetTrappedEmulatorPortsübergeben werden soll.

RangeLength

Gibt die Anzahl der E/A-Ports oder die Größe in Byte für den Bereich an.

RangeInIoSpace

Gibt an, ob sich der Bereich im E/A-Bereich oder im Arbeitsspeicher befindet. Ein Wert von TRUE (1) gibt an, dass sich der Bereich im E/A-Leerzeichen befindet; ein Wert von FALSE (0) gibt an, dass sich der Bereich im Arbeitsspeicher befindet.

RangeVisible

Wird ignoriert, wenn die HwVidFindAdapter-Funktion des Miniporttreibers das Array der Zugriffsbereiche einleitet.

Ist auf TRUE- von VGA-kompatiblen Miniporttreibern festgelegt und an VideoPortSetTrappedEmulatorPorts übergeben, um direkten Zugriff auf den E/A-Portbereich durch eine Vollbild-MS-DOS-Anwendung zu ermöglichen. Bei Festlegung auf FALSEwerden von der Anwendung ausgestellte Anweisungen weiterhin abgefangen und zur Überprüfung an die SvgaHwIoXxx Funktion des Miniporttreibers weitergeleitet.

RangeShareable

Ist auf TRUE festgelegt, wenn der durch dieses Element beschriebene Zugriffsbereich für einen anderen Treiber und/oder ein anderes Gerät freigegeben werden kann oder um FALSE-zu, wenn der Bereich nicht freigegeben werden kann.

Wird von VideoPortSetTrappedEmulatorPorts ignoriert.

RangePassive

Gibt an, ob das Gerät tatsächlich den Port verwendet. Die Werte für dieses Element werden in der folgenden Tabelle angezeigt.

Wert Bedeutung
VIDEO_RANGE_PASSIVE_DECODE Das Gerät decodiert den Port, aber der Treiber verwendet ihn nicht.
VIDEO_RANGE_10_BIT_DECODE Das Gerät decodiert zehn Bit der Portadresse.

Bemerkungen

Der Miniporttreiber muss legacy-Ressourcen in seiner DriverEntry- oder HwVidLegacyResources--Funktion beanspruchen.

Andernfalls richtet die HwVidFindAdapter Funktion eines Miniporttreibers das Zugriffsbereichsarray für die PCI-Ressourcen eines Adapters ein. Sie kann informationen verwenden, die von VideoPortGetAccessRangeszurückgegeben werden. Alternativ können Informationen verwendet werden, die aus der Registrierung abgerufen werden, indem sie VideoPortGetDeviceData- mit einem vom Miniport bereitgestellten HwVidQueryDeviceCallback-Funktion oder VideoPortGetRegistryParameters mit einem vom Miniport-Treiber bereitgestellten HwVidQueryNamedValueCallback--Funktion aufrufen. Wenn beim Aufrufen dieser VideoPortXxx die Werte für den busrelativen Zugriffsbereich nicht bereitgestellt werden, können HwVidFindAdapter- Zugriffsbereiche mithilfe der vom Treiber bereitgestellten busrelativen Standardwerte einrichten.

Anspruch auf Zugriffsbereiche in der Registrierung

Der Miniporttreiber sollte VideoPortVerifyAccessRanges- mit allen Zugriffsbereichen aufrufen, die von VideoPortGetDeviceData, VideoPortGetAccessRangesabgerufen oder als Standard vom Miniporttreiber bereitgestellt werden. Wenn VideoPortVerifyAccessRanges für ein solches Array von Zugriffsbereichen NO_ERROR zurückgibt, können die HwVidFindAdapter oder HwVidQueryDeviceCallback-Funktion die Bereiche mit VideoPortGetDeviceBase zuordnen und die zurückgegebenen zugeordneten logischen Adressen verwenden, um auf den Adapter zuzugreifen.

Ein erfolgreicher Aufruf von VideoPortGetAccessRanges beansprucht auch die zurückgegebenen busrelativen Zugriffsbereiche in der Registrierung für den Aufrufer. Wenn der Miniporttreiber einen der zurückgegebenen Werte ändert, muss er VideoPortVerifyAccessRanges mit dem vollständigen Zugriffsbereich aufrufen, einschließlich aller nicht geänderten Elemente. Jeder Aufruf von VideoPortGetAccessRanges oder VideoPortVerifyAccessRanges für einen bestimmten Grafikkarte überschreibt die beanspruchten Hardwareressourcen des Aufrufers in der Registrierung.

Ein Miniporttreiber darf nicht versuchen, einen Bereich zu verwenden, für den VideoPortVerifyAccessRanges oder VideoPortGetAccessRanges nicht NO_ERROR zurückgibt.

Zuordnen von Zugriffsbereichen zur Kommunikation mit dem Adapter

Nachdem ein Miniporttreiber Ressourcen in der Registrierung für einen Adapter beansprucht hat, kann er keine busrelativen Adressen verwenden, um auf den Adapter zuzugreifen oder ihn zu konfigurieren, da die HAL alle busrelativen Geräteadressen Systemspeicherplatzneu zuordnen kann.

Die HwVidFindAdapter--Funktion des Miniporttreibers muss VideoPortGetDeviceBase- aufrufen, um zugeordnete logische Adressen für die Zugriffsbereiche abzurufen. Nur dann kann der Miniporttreiber mit dem Grafikkarten kommunizieren, indem die zurückgegebenen zugeordneten logischen Bereichsadressen an VideoPortRead/WritePortXxx übergeben werden, um auf den Gerätespeicher im E/A-Raum zuzugreifen und/oder VideoPortRead/WriteRegisterXxx, um auf den Gerätespeicher im Arbeitsspeicher zuzugreifen.

Bestimmen, ob ein Zugriffsbereich freigegeben werden kann

Befolgen Sie die folgenden Richtlinien, um zu bestimmen, ob ein Zugriffsbereich freigegeben werden kann:
  • Wenn der Speicherbereich oder die E/A-Ports diesem Treiber "gehören" und/oder der Zugriff auf diesen Bereich durch einen anderen Treiber zu einem Problem führen kann, legen Sie RangeSharable- auf FALSE-fest.
  • Wenn der Bereich mit einem kooperierenden Gerätetreiber geteilt werden kann, legen Sie RangeSharable- auf TRUEfest.
SVGA-Miniporttreiber, die alle VGA-Funktionen implementieren (in der Registrierung als VgaCompatible auf einen festgelegt) sollten ihre Zugriffsbereiche als unharrbar beanspruchen, sodass der VGA-Systemtreiber nicht geladen wird. Andererseits sollten Miniporttreiber für Adapter wie S3 oder XGA, die VgaCompatible auf Null in der Registrierung festlegen, alle Ressourcen beanspruchen, die sie mit dem SYSTEM VGA-Treiber gemeinsam nutzen.

Miniporttreiber für Karten, die mit einem Pass-Through-IOCTL arbeiten und mit jeder VGA- oder SVGA-Karte verbunden werden können, sollten jedoch keine SYSTEM-VGA-Ports oder Speicherbereiche verwenden. Wenn dies der Fall ist, sollte ein solcher Treiber nicht versuchen, einen der VGA-Zugriffsbereiche in der Registrierung geltend zu machen. Versuche, VGA-Ressourcen von einem solchen Miniporttreiber in Anspruch zu nehmen, verursachen wahrscheinlich einen Ressourcenkonflikt, da der Treiber einer SVGA-Karte auf dem Computer diese Zugriffsbereiche als unharrbar beansprucht hat.

Übergeben von E/A-Portbereichselementen an VideoPortSetTrappedEmulatorPorts

Es wird davon ausgegangen, dass alle VIDEO_ACCESS_RANGE Arrayelemente, die E/A-Portbereiche beschreiben, unsichtbar sein, es sei denn, ein VGA-kompatibler Miniporttreiber auf einem x86-basierten Computer setzt die RangeVisible Member(n) explizit auf TRUE zurück und ruft VideoPortSetTrappedEmulatorPorts auf, um einen oder mehrere E/A-Portbereiche zu aktivieren. VideoPortSetTrappedEmulatorPorts ignoriert die RangeSharable Member des Eingabearrays.

In einem Array von VIDEO_ACCESS_RANGE-Typelementen, die an VideoPortSetTrappedEmulatorPortsübergeben werden, bestimmt der Wert des RangeVisible-Elements jedes Elements Member, ob auf die angegebene E/A-Port(n) direkt durch der VDM (MS-DOS Anwendung, die auf einem x86-basierten Computer im Vollbildmodus ausgeführt wird) oder ob ein solcher anwendungsausgestellter E/A-Stream abgefangen und an einen miniporttreiber bereitgestellten SvgaHwIoPortXxx-Funktion zur ersten Überprüfung weitergeleitet wird.

Anforderungen

Anforderung Wert
Header- video.h (video.h einschließen)

Siehe auch

DriverEntry des Video Miniport-Treibers

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidQueryDeviceCallback-

HwVidQueryNamedValueCallback-

VIDEO_HW_INITIALIZATION_DATA

VideoPortGetAccessRanges-

VideoPortGetDeviceBase-

VideoPortGetDeviceData-

VideoPortGetRegistryParameters

VideoPortInitialize-

VideoPortSetTrappedEmulatorPorts

VideoPortVerifyAccessRanges