VIDEO_ACCESS_RANGE-Struktur (video.h)

Die VIDEO_ACCESS_RANGE-Struktur definiert einen Geräte-E/A-Port oder Einen Speicherbereich für die Grafikkarte. Die HwVidFindAdapter-Funktion jedes Miniporttreibers muss für jede Grafikkarte, die vom Miniporttreiber unterstützt wird, ein Array von VIDEO_ACCESS_RANGE-Typelementen einrichten, das als Zugriffsbereichsarray bezeichnet wird.

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;

Member

RangeStart

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

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

RangeLength

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

RangeInIoSpace

Gibt an, ob sich der Bereich im E/A-Bereich oder im Arbeitsspeicher befindet. Der Wert TRUE (1) gibt an, dass sich der Bereich im E/A-Raum befindet. Der Wert FALSE (0) gibt an, dass sich der Bereich im Arbeitsspeicher befindet.

RangeVisible

Wird ignoriert, wenn die HwVidFindAdapter-Funktion des Miniporttreibers das Zugriffsbereichsarray ein richtet.

Wird von VGA-kompatiblen Miniporttreibern auf TRUE festgelegt und an VideoPortSetTrappedEmulatorPorts übergeben, um den direkten Zugriff auf den E/A-Portbereich durch eine VOLLbild-MS-DOS-Anwendung zu ermöglichen. Wenn dieser Wert auf FALSE festgelegt ist, werden von der Anwendung ausgestellte Anweisungen weiterhin eingefangen und zur Überprüfung an die SvgaHwIoXxx-Funktion des Miniporttreibers weitergeleitet.

RangeShareable

Wird auf TRUE festgelegt, wenn der von diesem Element beschriebene Zugriffsbereich für einen anderen Treiber und/oder ein anderes Gerät freigegeben werden kann, oder auf FALSE , 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 Bits der Portadresse.

Hinweise

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

Andernfalls richtet die HwVidFindAdapter-Funktion eines Miniporttreibers das Zugriffsbereichsarray für die PCI-Ressourcen eines Adapters ein. Es kann Informationen verwenden, die von VideoPortGetAccessRanges zurückgegeben werden. Alternativ kann es Informationen verwenden, die aus der Registrierung abgerufen werden, indem VideoPortGetDeviceData mit einer vom Miniport-Treiber bereitgestellten HwVidQueryDeviceCallback-Funktion oder VideoPortGetRegistryParameters mit einer vom Miniport-Treiber bereitgestellten HwVidQueryNamedValueCallback-Funktion aufgerufen wird. Wenn der Aufruf dieser VideoPortXxx nicht die Werte für den busrelativen Zugriffsbereich liefert, kann HwVidFindAdapter Zugriffsbereichselemente mit vom Treiber bereitgestellten busrelativen Standardwerten einrichten.

Anfordern von Zugriffsbereichen in der Registrierung

Der Miniporttreiber sollte VideoPortVerifyAccessRanges mit allen Zugriffsbereichen aufrufen, die von VideoPortGetDeviceData, VideoPortGetAccessRanges abgerufen oder vom Miniporttreiber als Standard bereitgestellt werden. Wenn VideoPortVerifyAccessRanges NO_ERROR für ein solches Array von Zugriffsbereichen zurückgibt, kann die Funktion HwVidFindAdapter oder HwVidQueryDeviceCallback 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 Vollzugriffsbereich aufrufen, einschließlich aller unverä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ückgeben.

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 dem Systemspeicherplatz neu zuordnen kann.

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

Bestimmen, ob ein Zugriffsbereich Sharable ist

Befolgen Sie die folgenden Richtlinien, um zu bestimmen, ob ein Zugriffsbereich freigegeben werden kann:
  • Wenn der Speicherbereich oder E/A-Ports diesem Treiber "gehören" und/oder der Zugriff auf diesen Bereich durch einen anderen Treiber ein Problem verursachen kann, legen Sie RangeSharable auf FALSE fest.
  • Wenn der Bereich für einen kooperierenden Gerätetreiber freigegeben werden kann, legen Sie RangeSharable auf TRUE fest.
SVGA-Miniporttreiber, die alle VGA-Funktionen implementieren (die in der Registrierung als VgaCompatible deklariert sind, die auf 1 festgelegt sind), sollten ihre Zugriffsbereiche als nicht freizugeben, damit der VGA-Systemtreiber nicht geladen wird. Auf der anderen Seite sollten Miniporttreiber für Adapter wie den S3 oder den XGA, die VgaCompatible in der Registrierung auf 0 festlegen, alle Ressourcen, die sie mit dem VGA-Treiber des Systems teilen, als Sharable beanspruchen.

Miniporttreiber für Karten, die mit einer Passthrough-IOCTL arbeiten und mit jedem VGA- oder SVGA-Karte verbunden werden können, sollten jedoch keine VGA-Systemanschlüsse oder -Speicherbereiche verwenden. Wenn dies der Fall ist, sollte ein solcher Treiber nicht versuchen, einen der VGA-Zugriffsbereiche in der Registrierung in Anspruch zu nehmen. Versuche, VGA-Ressourcen von einem solchen Miniporttreiber in Anspruch zu nehmen, führen wahrscheinlich zu einem Ressourcenkonflikt, da der Treiber eines SVGA-Karte auf dem Computer diese Zugriffsbereiche als nicht freizugeben gilt.

Übergeben von E/A-Portbereichselementen an VideoPortSetTrappedEmulatorPorts

Es wird angenommen, dass alle VIDEO_ACCESS_RANGE Arrayelemente, die E/A-Portbereiche beschreiben, unsichtbar sind, es sei denn, ein VGA-kompatibler Miniporttreiber in einem x86-basierten Computer setzt die RangeVisible-Member 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-Elementen, die an VideoPortSetTrappedEmulatorPorts übergeben werden, Der Wert des RangeVisible-Elements jedes Elements bestimmt, ob der VDM (MS-DOS-Anwendung, die im Vollbildmodus auf einem x86-basierten Computer ausgeführt wird) auf die angegebenen E/A-Ports direkt zugegriffen werden kann oder ob ein solcher von der Anwendung ausgestellter E/A-Stream erfasst und zur Überprüfung zuerst an eine vom Miniport-Treiber bereitgestellte SvgaHwIoPortXxx-Funktion weitergeleitet wird.

Anforderungen

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

Weitere Informationen

DriverEntry of Video Miniport Driver

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter

HwVidQueryDeviceCallback

HwVidQueryNamedValueCallback

VIDEO_HW_INITIALIZATION_DATA

VideoPortGetAccessRanges

VideoPortGetDeviceBase

VideoPortGetDeviceData

VideoPortGetRegistryParameters

VideoPortInitialize

VideoPortSetTrappedEmulatorPorts

VideoPortVerifyAccessRanges