DXGK_SPB_INTERFACE-Struktur (dispmprt.h)
Die DXGK_SPB_INTERFACE-Struktur enthält Zeiger auf Funktionen in der SPB-Schnittstelle (Simple Peripheral Bus), die ein Windows Display Driver Model (WDDM) 1.2 und höher-Displayporttreiber aufrufen kann, um SPB-Ressourcen zu untersuchen und zu ändern.
Syntax
typedef struct _DXGK_SPB_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
NTSTATUS(HANDLE DeviceHandle,LARGE_INTEGER SpbReourceId,UNICODE_STRING *SpbResourceSubName,ACCESS_MASK DesiredAccess,ULONG ShareAccess,ULONG OpenOptions,VOID **SpbResource) * )(OpenSpbResource;
NTSTATUS()(HANDLE DeviceHandle,VOID *SpbResource) * CloseSpbResource;
NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG Length,VOID *Buffer,LARGE_INTEGER *ByteOffset,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock) * )(HReadSpbResource;
NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG Length,VOID *Buffer,LARGE_INTEGER *ByteOffset,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock) * )(HWriteSpbResource;
NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG IoControlCode,ULONG InBufferSize,VOID *InputBuffer,ULONG OutBufferSize,VOID *OutputBuffer,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock) * )(HSpbResourceIoControl;
} DXGK_SPB_INTERFACE, *PDXGK_SPB_INTERFACE;
Member
Size
Die Größe (in Bytes) dieser Struktur.
Version
Die Versionsnummer der SPB-Schnittstelle. Versionsnummernkonstanten werden in Dispmprt.h definiert (z. B. DXGK_SPB_INTERFACE_VERSION_1).
Context
Ein Zeiger auf einen Kontext, der vom Anzeigeminiporttreiber bereitgestellt wird.
InterfaceReference
Ein Zeiger auf eine Schnittstellenverweisfunktion, die vom Anzeigeminiporttreiber implementiert wird.
InterfaceDereference
Ein Zeiger auf eine Schnittstellendereferenzierungsfunktion, die vom Anzeigeminiporttreiber implementiert wird.
OpenSpbResource
Öffnet eine SPB-Ressource (Simple Peripheral Bus). Alle Eingabeparameter werden vom Anzeigeminiporttreiber bereitgestellt.
OpenSpbResource-Parameter | BESCHREIBUNG |
---|---|
DeviceHandle | Ziehpunkt, der einen Grafikkarte darstellt. Der Anzeige-Miniporttreiber hat dieses Handle zuvor im DeviceHandle-Member der DXGKRNL_INTERFACE-Struktur abgerufen, die an die DxgkDdiStartDevice-Funktion übergeben wurde. |
SpbReourceId | Die Ressourcen-ID des SPB-Ressourcenhubs. |
SpbResourceSubName | Optionaler Zeiger auf den Unicode SPB-Ressourcenunternamen. |
DesiredAccess | Ein ACCESS_MASK Wert, der den angeforderten Zugriff auf die SPB-Ressource bestimmt. Weitere Informationen finden Sie im DesiredAccess-Parameter der ZwCreateFile-Funktion . |
ShareAccess | Typ des Freigabezugriffs für die Datei. Weitere Informationen finden Sie im ShareAccess-Parameter von ZwCreateFile. |
OpenOptions | Die Optionen, die beim Öffnen der SPB-Ressource angewendet werden sollen. Weitere Informationen finden Sie im CreateOptions-Parameter von ZwCreateFile. |
SpbResource | Ein Zeiger auf einen Puffer, der verwendet wird, um das Handle an die SPB-Ressource zurückzugeben. |
CloseSpbResource
Schließt eine SPB-Ressource. Alle Eingabeparameter werden vom Anzeigeminiporttreiber bereitgestellt.
Das Schließen eines geöffneten Objekthandles führt dazu, dass dieses Handle ungültig wird. Das System verringert auch die Handleanzahl für das Objekt und überprüft, ob das Objekt gelöscht werden kann. Das System löscht das Objekt erst, wenn alle Handles des Objekts geschlossen sind und keine Zeiger, auf die verwiesen wird, verbleiben.
Der Treiber muss CloseSpbResource aufrufen, um jedes Handle zu schließen, das er mit OpenSpbResource geöffnet hat, sobald das Handle nicht mehr benötigt wird.
Aufrufer von CloseSpbResource sollten nicht davon ausgehen, dass diese Funktion vor der Rückgabe automatisch darauf wartet, dass alle E/A-Vorgänge abgeschlossen sind.
CloseSpbResource-Parameter | BESCHREIBUNG |
---|---|
DeviceHandle | Ein Handle, das eine Grafikkarte darstellt. Der Anzeige-Miniporttreiber hat dieses Handle zuvor im DeviceHandle-Member der DXGKRNL_INTERFACE-Struktur abgerufen, die an die DxgkDdiStartDevice-Funktion übergeben wurde. |
SpbResource | Ein Zeiger auf eine SPB-Ressource, die der Anzeige-Miniporttreiber mit der OpenSpbResource-Funktion geöffnet hat. |
ReadSpbResource
Liest Daten aus einer geöffneten SPB-Ressource. Alle Eingabeparameter werden vom Anzeigeminiporttreiber bereitgestellt.
Wenn der Aufruf von OpenSpbResource eines der OpenOptions-FlagsFILE_SYNCHRONOUS_IO_ALERT oder FILE_SYNCHRONOUS_IO_NONALERT (definiert in Wdm.h) festgelegt hat, behält der E/A-Manager die aktuelle Dateiposition bei. Wenn ja, kann der Aufrufer von ReadSpbResource angeben, dass anstelle eines expliziten ByteOffset-Werts der aktuelle Dateipositionsoffset verwendet wird. Diese Spezifikation kann mit einer der folgenden Methoden erstellt werden:
- Geben Sie einen Zeiger auf einen LARGE_INTEGER Wert an, wobei der HighPart-Member auf -1 und der LowPart-Member auf den systemdefinierte Wert FILE_USE_FILE_POINTER_POSITION (definiert in Wdm.h) festgelegt ist.
- Übergeben Sie einen NULL-Zeiger für ByteOffset.
ReadSpbResource aktualisiert die aktuelle Dateiposition, indem die Anzahl der beim Abschluss des Lesevorgangs gelesenen Bytes hinzugefügt wird, wenn die aktuelle Dateiposition verwendet wird, die vom E/A-Manager verwaltet wird.
Selbst wenn der E/A-Manager die aktuelle Dateiposition beibehielt, kann der Aufrufer diese Position zurücksetzen, indem er einen expliziten ByteOffset-Wert an ReadSpbResource übergibt. Dadurch wird die aktuelle Dateiposition automatisch in diesen ByteOffset-Wert geändert, der Lesevorgang ausgeführt und dann die Position entsprechend der Anzahl der tatsächlich gelesenen Bytes aktualisiert. Diese Technik bietet dem Aufrufer einen atomischen Such- und Lesedienst.
OpenSpbResource-Parameter | BESCHREIBUNG |
---|---|
DeviceHandle | Ein Handle, das eine Grafikkarte darstellt. Der Anzeige-Miniporttreiber hat dieses Handle zuvor im DeviceHandle-Member der DXGKRNL_INTERFACE-Struktur abgerufen, die an die DxgkDdiStartDevice-Funktion übergeben wurde. |
SpbResource | Ein Zeiger auf eine SPB-Ressource, die der Anzeige-Miniporttreiber mit der OpenSpbResource-Funktion geöffnet hat. |
Länge | Die Größe des Puffers in Bytes, auf den der Buffer-Parameter verweist. |
Buffer | Ein Zeiger auf einen Puffer, der die aus der angegebenen SPB-Ressource gelesenen Daten empfängt. |
ByteOffset | Ein optionaler Zeiger auf eine Variable, der den Anfangsbyteoffset in der SPB-Ressource angibt, in der der Lesevorgang beginnt. Wenn versucht wird, über das Ende der Datei hinaus zu lesen, gibt ReadSpbResource einen Fehler zurück. |
EventHandle | Ein optionales Handle für ein vom Aufrufer erstelltes Ereignis. Wenn dieser Parameter angegeben wird, wird der Aufrufer in einen Wartezustand versetzt, bis der Lesevorgang abgeschlossen ist und das angegebene Ereignis auf den Signalzustand festgelegt ist. Dieser Parameter kann NULL sein. |
IoStatusBlock | Ein Zeiger auf eine IO_STATUS_BLOCK-Struktur, die die endgültige Vervollständigung status und Informationen zum angeforderten Lesevorgang empfängt. Der Information-Member der IO_STATUS_BLOCK-Struktur empfängt die Anzahl der Bytes, die tatsächlich aus der SPB-Ressource gelesen werden. |
WriteSpbResource
Schreibt Daten in eine geöffnete SPB-Ressource.
Wenn beim Aufruf der OpenSpbResource-Funktion nur das DesiredAccess-FlagFILE_APPEND_DATA festgelegt wird, wird der ByteOffset-Parameter ignoriert. In diesem Fall werden die Daten im Puffer, auf die der Buffer-Parameter für Längenbytes verweist, ab dem aktuellen Ende der Datei geschrieben.
Wenn beim Aufruf von OpenSpbResource eines der CreateOptions-Flags , FILE_SYNCHRONOUS_IO_ALERT oder FILE_SYNCHRONOUS_IO_NONALERT festgelegt wird, behält der E/A-Manager die aktuelle Dateiposition bei. Wenn ja, kann der Aufrufer von WriteSpbResource angeben, dass der aktuelle Dateipositionsoffset anstelle eines expliziten ByteOffset-Werts verwendet wird. Diese Spezifikation kann mit einer der folgenden Methoden erstellt werden:
- Geben Sie einen Zeiger auf einen LARGE_INTEGER Wert an, wobei der HighPart-Member auf -1 und der LowPart-Member auf den systemdefinierte Wert FILE_USE_FILE_POINTER_POSITION (definiert in Wdm.h) festgelegt ist.
- Übergeben Sie einen NULL-Zeiger für ByteOffset.
WriteSpbResource aktualisiert die aktuelle Dateiposition, indem die Anzahl der geschriebenen Bytes hinzugefügt wird, wenn der Schreibvorgang abgeschlossen wird, wenn die aktuelle Dateiposition verwendet wird, die vom E/A-Manager verwaltet wird.
Selbst wenn der E/A-Manager die aktuelle Dateiposition beibehielt, kann der Aufrufer diese Position zurücksetzen, indem er einen expliziten ByteOffset-Wert an WriteSpbResource übergibt. Dadurch wird die aktuelle Dateiposition automatisch in diesen ByteOffset-Wert geändert, der Schreibvorgang ausgeführt und dann die Position entsprechend der Anzahl der tatsächlich geschriebenen Bytes aktualisiert. Diese Technik bietet dem Aufrufer einen atomischen Such- und Schreibdienst.
Es ist auch möglich, einen Schreibvorgang am aktuellen Ende der Datei zu starten, indem für ByteOffset ein Zeiger auf einen LARGE_INTEGER Wert angegeben wird, wobei HighPart auf -1 und LowPart auf FILE_WRITE_TO_END_OF_FILE festgelegt ist. Dies funktioniert unabhängig davon, ob der E/A-Manager die aktuelle Dateiposition bei behält.
WriteSpbResource-Parameter | BESCHREIBUNG |
---|---|
DeviceHandle | Ein Handle, das eine Grafikkarte darstellt. Der Anzeigeminiporttreiber hat dieses Handle zuvor im DeviceHandle-Member der DXGKRNL_INTERFACE-Struktur abgerufen, die an die DxgkDdiStartDevice-Funktion übergeben wurde. |
SpbResource | Ein Zeiger auf eine SPB-Ressource, die der Anzeigeminiporttreiber mit der OpenSpbResource-Funktion geöffnet hat. |
Länge | Die Größe des Puffers in Bytes, auf die der Buffer-Parameter verweist. |
Buffer | Ein Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der die Daten enthält, die in die angegebene SPB-Ressource geschrieben werden sollen. |
ByteOffset | Ein optionaler Zeiger auf eine Variable, der den Anfangsbyteoffset in der SPB-Ressource angibt, in der der Schreibvorgang beginnt. Wenn die Parameter Length und ByteOffset einen Schreibvorgang über die aktuelle Dateiendemarke hinaus angeben, erweitert WriteSpbResource die Datei automatisch und aktualisiert die Markierung zum Ende der Datei. Alle Bytes, die nicht explizit zwischen diesen alten und neuen End-of-File-Markierungen geschrieben werden, werden als Null definiert. |
EventHandle | Ein optionales Handle für ein vom Anrufer erstelltes Ereignis. Wenn dieser Parameter angegeben wird, wird der Aufrufer in einen Wartezustand versetzt, bis der Schreibvorgang abgeschlossen ist und das angegebene Ereignis auf den Signalzustand festgelegt ist. Dieser Parameter kann NULL sein. |
IoStatusBlock | Ein Zeiger auf eine IO_STATUS_BLOCK-Struktur, die die endgültige Vervollständigung status und Informationen zum angeforderten Schreibvorgang empfängt. Das Information-Element der IO_STATUS_BLOCK-Struktur empfängt die Anzahl der Bytes, die tatsächlich in die SPB-Ressource geschrieben wurden. |
SpbResourceIoControl
Führt einen E/A-Steuerungsvorgang für eine geöffnete SPB-Ressource (Simple Peripheral Bus) aus. Alle Eingabeparameter werden vom Anzeigeminiporttreiber bereitgestellt.
Wenn der Aufrufer die Datei für asynchrone E/A geöffnet hat (ohne dass FILE_SYNCHRONOUS_XXX Option create/open festgelegt ist), wird das angegebene Ereignis, falls vorhanden, auf den Signalzustand festgelegt, wenn der Gerätesteuerungsvorgang abgeschlossen ist. Andernfalls wird das durch den DeviceHandle-Parameter angegebene Dateiobjekt auf den Signaled-Zustand festgelegt.
SpbResourceIoControl-Parameter | BESCHREIBUNG |
---|---|
DeviceHandle | Ein Handle, das einen Anzeigeadapter darstellt. Der Anzeigeminiporttreiber hat dieses Handle zuvor im DeviceHandle-Member der DXGKRNL_INTERFACE-Struktur abgerufen, die an die DxgkDdiStartDevice-Funktion übergeben wurde. |
SpbResource | Ein Zeiger auf eine SPB-Ressource, die der Anzeigeminiporttreiber mit der OpenSpbResource-Funktion geöffnet hat. |
Iocontrolcode | Ein Geräte-E/A-Steuercode (IOCTL_XXX), der angibt, auf welchem Geräte-E/A-Steuerungsvorgang ausgeführt werden soll, in der Regel vom zugrunde liegenden Gerätetreiber. Der Wert dieses Parameters bestimmt das Format und die erforderliche Länge der Parameter InputBuffer und OutputBuffer sowie welche der folgenden Parameterpaare erforderlich sind. |
InBufferSize | Die Größe des Puffers in Bytes, auf den der InputBuffer-Parameter verweist. Dieser Wert wird ignoriert, wenn InputBufferNULL ist. |
Inputbuffer | Ein Zeiger auf einen vom Aufrufer zugewiesenen Eingabepuffer, der gerätespezifische Informationen enthält, die dem Zielgerät zugewiesen werden sollen. Wenn der IoControlCode-Parameter einen Vorgang angibt, der keine Eingabedaten erfordert, kann dieser Zeiger NULL sein. |
OutBufferSize | Die Größe des Puffers in Bytes, auf die der OutputBuffer-Parameter verweist. Dieser Wert wird ignoriert, wenn OutputBufferNULL ist. |
OutputBuffer | Ein Zeiger auf einen vom Aufrufer zugewiesenen Ausgabepuffer, in dem Informationen vom Zielgerät zurückgegeben werden. Wenn der IoControlCode-Parameter einen Vorgang angibt, der keine Ausgabedaten erzeugt, kann dieser Zeiger NULL sein. |
EventHandle | Ein optionales Handle für ein vom Anrufer erstelltes Ereignis. Wenn dieser Parameter angegeben wird, wird der Aufrufer in einen Wartezustand versetzt, bis der angeforderte Vorgang abgeschlossen ist und das angegebene Ereignis auf den Signalzustand festgelegt ist. Dieser Parameter kann NULL sein. |
IoStatusBlock | Ein Zeiger auf eine Variable, die die endgültige Vervollständigung status und Informationen zum angeforderten E/A-Steuerungsvorgang empfängt. Bei erfolgreichen Aufrufen, die Daten zurückgeben, wird die Anzahl der Bytes, die in den Puffer geschrieben wurden, auf die der OutputBuffer-Parameter verweist, im Element Information der IO_STATUS_BLOCK-Struktur zurückgegeben. |
Hinweise
Um die Funktionen dieser Struktur zu verwenden, geben Sie zuerst die Member Size und Version der DXGK_SPB_INTERFACE-Struktur an. Rufen Sie dann die DxgkCbQueryServices-Funktion auf, wobei der Parameter ServicesType auf einen Wert von DxgkServicesFirmwareTable festgelegt ist, und legen Sie den Parameter Interface auf die Adresse (als PINTERFACE umgewandelt) der DXGK_SPB_INTERFACE-Struktur fest.
Weitere Informationen zur SPB-Architektur finden Sie unter Entwurfshandbuch für einfache Peripheriebusse und SPB-Peripherietreiber**.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8 |
Unterstützte Mindestversion (Server) | Windows Server 2012 |
Kopfzeile | dispmprt.h (include Dispmprt.h) |