DXGKDDI_SYSTEM_DISPLAY_ENABLE Rückruffunktion (dispmprt.h)

Wird vom Betriebssystem aufgerufen, um den Anzeigeminiporttreiber anzufordern, um das aktuelle Anzeigegerät auf einen angegebenen Zustand zurückzusetzen.

Ab Windows 8 ruft das Betriebssystem diese Funktion während eines Fehlers zur Fehlerüberprüfung auf.

Syntax

DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;

NTSTATUS DxgkddiSystemDisplayEnable(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [in]  PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
  [out] UINT *Width,
  [out] UINT *Height,
  [out] D3DDDIFORMAT *ColorFormat
)
{...}

Parameter

[in] MiniportDeviceContext

Ein Handle für einen Kontextblock, der einem Anzeigeadapter zugeordnet ist. Die DxgkDdiAddDevice-Funktion des Anzeigeminiporttreibers hat dieses Handle zuvor für das Microsoft DirectX-Grafikkernsubsystem bereitgestellt.

[in] TargetId

Ein D3DDDI_VIDEO_PRESENT_TARGET_ID Wert, der den Bezeichner des Videoziels auf der Grafikkarte angibt, mit der das Anzeigegerät verbunden ist. Dieser Bezeichner kann für das Ziel sein, das während des vorherigen Aufrufs von DxgkDdiCommitVidPn im aktuellen Video present Network-Zustand (VidPn) verlassen wurde.

Weitere Informationen zur Verwendung des TargetId-Parameters finden Sie im abschnitt "Video present target initialization".

[in] Flags

Ein Zeiger auf einen Wert, der ein bitweises OR von Flags enthält. Dieses Element wird vom Betriebssystem reserviert.

[out] Width

Ein UINT-Wert, der die Breite des Anzeigemodus des angegebenen Geräts in Pixeleinheiten angibt.

[out] Height

Ein UINT-Wert, der die Höhe des Anzeigemodus des angegebenen Geräts in Pixeleinheiten angibt.

[out] ColorFormat

Ein Zeiger auf einen D3DDDIFORMAT-Wert , der das Farbformat des Anzeigegeräts angibt.

Rückgabewert

DxgkDdiSystemDisplayEnable gibt STATUS_SUCCESS zurück, wenn dies erfolgreich ist. Wenn das durch den TargetId-Parameter angegebene Ziel nicht mit einem Anzeigegerät verbunden ist, gibt die Funktion STATUS_NOT_SUPPORTED zurück. Andernfalls wird einer der in "Ntstatus.h" definierten Fehlercodes zurückgegeben.

Hinweise

Erforderliche Schritte nach Anzeige des Miniporttreibers

Der Anzeigeminiporttreiber muss die folgenden Schritte ausführen, wenn seine DxgkDdiSystemDisplayEnable-Funktion aufgerufen wird:
  1. Der Treiber muss alle GPU-Vorgänge (Graphics Processing Unit) abbrechen oder die GPU in den Leerlaufzustand zurücksetzen.
  2. Das Betriebssystem gibt das Videoziel über den TargetId-Parameter an. Der Treiber muss die anzeige, die diesem Ziel zugeordnet ist, eingeschaltet und sichtbar halten. Wenn der Treiber das Display nicht einschalten kann, muss der Aufruf dieser Funktion fehlschlagen. In einem solchen Fehlerfall kann das Betriebssystem die DxgkDdiResetDevice-Funktion aufrufen und eine Systemfehlerüberprüfung verursachen.
  3. Der Treiber muss die Konnektivität der anzeige überprüfen, die diesem Ziel zugeordnet ist. Wenn das Ziel keine Anzeige angeschlossen hat, muss der Treiber den Aufruf dieser Funktion abschließen und den STATUS_NOT_SUPPORTED Fehlercode zurückgeben.
  4. Der Treiber muss das Signal für alle anderen Displays deaktivieren, die mit dem Grafikkarte verbunden sind. Wenn dies nicht möglich ist, sollte der Treiber versuchen, ein leeres Bild auf allen anderen Displays zu platzieren. Wenn dies nicht möglich ist, muss der Treiber das letzte Bild auf dem Bildschirm unverändert lassen.
  5. Der Treiber muss den aktuellen Anzeigemodus auf dem angegebenen Ziel beibehalten und diesen Modus im Rahmen dieses Funktionsaufrufs dem Betriebssystem zurückgeben.
  6. Wenn der Treiber den aktuellen Anzeigemodus nicht beibehalten kann oder das Ziel nicht Teil der aktiven Topologie ist, sollte der Treiber versuchen, einen Framepuffer für ein anderes Ziel festzulegen, das eine Anzeigeauflösung von mindestens 640 x 480 Pixeln im Format von 24 Bit pro Pixel erreichen kann. Wenn dies nicht möglich ist, kann der Treiber diesen Funktionsaufruf fehlschlagen, was zu einer Systemfehlerüberprüfung und der Anzeige eines schwarzen Bildschirms führt.

    Es ist nicht erforderlich, dass der Treiber einen linearen Framepuffermodus verwendet. Der Treiber sollte jedoch Schreibvorgänge in diesen Framepuffer von Quellen unterstützen, die das D3DDDIFMT_A8R8G8B8 Format der D3DDDIFORMAT-Enumeration haben.

Quellimageeinschränkungen

Nachdem der Treiber dem Betriebssystem die Kontrolle über die Anzeigefunktionen erteilt hat, kann das Betriebssystem die DxgkDdiSystemDisplayWrite-Funktion aufrufen, um das Bildschirmbild zu aktualisieren und einen Block von Bildern aus angegebenen Quellen auf den Bildschirm zu schreiben, der von der DxgkDdiSystemDisplayEnable-Funktion zurückgesetzt wurde.

DxgkDdiSystemDisplayWrite stellt dem Treiber die Startadresse des Quellimages sowie den Schritt, die Breite und die Höhe bereit. Das Farbformat des Quellbilds ist immer D3DDDIFMT_X8R8G8B8. Das Betriebssystem garantiert, dass sich das Quellimage im Nicht-Auslagerungsspeicher befindet.

Der Treiber muss dieses Quellbild auf den aktuellen Bildschirm schreiben, beginnend an den Positionen, die durch die Parameter PositionX und PositionY der DxgkDdiSystemDisplayWrite-Funktion angegeben sind .

Es wird empfohlen, dass der Treiber die CPU verwendet, um das Image aus der Quelle in den Framepuffer zu schreiben, da eine Systemfehlerprüfung möglicherweise durch wiederholte TDR-Instanzen (Timeouterkennung und -wiederherstellung) verursacht wird, die dazu führen, dass die GPU in einer unbekannten Bedingung ist.

Verwenden von nicht ausgelagertem Arbeitsspeicher

Windows-Kernelmodusfunktionen sind möglicherweise nicht verfügbar, während diese Funktion aufgerufen wird.

DxgkDdiSystemDisplayEnable kann in jedem IRQL aufgerufen werden, sodass es sich im nicht auslässigen Arbeitsspeicher befinden muss. DxgkDdiSystemDisplayEnable darf keinen Code aufrufen, der sich im auslagerungsfähigen Speicher befindet, und darf keine Daten bearbeiten, die sich im auslagerungsfähigen Speicher befinden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8
Unterstützte Mindestversion (Server) Windows Server 2012
Zielplattform Desktop
Kopfzeile dispmprt.h
IRQL Beliebige Ebene (siehe Abschnitt Hinweise)

Weitere Informationen

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite