Freigeben über


DXGKDDI_GETDISPLAYSTATEINTRUSIVE Rückruffunktion (dispmprt.h)

Das Betriebssystem ruft die DxgkDdiGetDisplayStateNonIntrusive Routine eines Anzeigeminiporttreibers auf, um Anzeigestatusinformationen vom Treiber zu sammeln.

Syntax

DXGKDDI_GETDISPLAYSTATEINTRUSIVE DxgkddiGetdisplaystateintrusive;

NTSTATUS DxgkddiGetdisplaystateintrusive(
  [in]     HANDLE Context,
  [in/out] PDXGKARG_GETDISPLAYSTATEINTRUSIVE pArgs
)
{...}

Parameter

[in] Context

Zeiger auf einen privaten Kontext, der von DxgkDdiQueryInterfacezurückgegeben wird.

[in/out] pArgs

Zeiger auf eine DXGKARG_GETDISPLAYSTATEINTRUSIVE-Struktur.

Rückgabewert

DxgkDdiGetDisplayStateIntrusive gibt STATUS_SUCCESS zurück, wenn dies erfolgreich ist. Andernfalls wird ein Fehlercode zurückgegeben, z. B. einer der folgenden.

Fehlercode Bedeutung
STATUS_DRIVER_INTERNAL_ERROR Innerhalb des Treibers ist ein generischer Softwarefehler aufgetreten.
STATUS_ACCESS_DENIED Die Hardware wird derzeit von anderen Threads verwendet, und dieser DDI kann nicht darauf zugreifen.
STATUS_DEVICE_HARDWARE_ERROR Generischer HW-Fehler ist aufgetreten.
STATUS_DEVICE_POWERED_OFF Das Gerät ist ausgeschaltet.

Bemerkungen

Das Betriebssystem ruft DxgkDdiGetDisplayStateIntrusive auf, um Anzeigestatusinformationen vom Treiber zu sammeln, wenn der Benutzer bereits in einem ungültigen Zustand ist. Im Gegensatz zu DxgkDdiGetDisplayStateNonIntrusivekann die DxgkDdiGetDisplayStateIntrusive Routine mehr aufdringliche Vorgänge ausführen, die für den Benutzer sichtbare Nebenwirkungen aufweisen. Ein aufdringlicher Vorgang wird wie folgt definiert (nicht intrusive Vorgänge weisen keine der folgenden Eigenschaften auf):

  • Es verursacht Nebenwirkungen (Störungen), die für den Benutzer sichtbar sind (z. B. vorübergehendes Beenden des Scans und destruktiven Überwachungskonnektivitätsprüfung).

  • Es ist langsam und wirkt sich auf die System- oder Anzeigeleistung aus, wenn sie häufig aufgerufen wird (mehrmals in einer Sekunde).

  • Er ändert den Zustand des Anzeigesubsystems (oder eines anderen Subsystems) direkt oder indirekt.

Der Treiber sollte den Zustand des Systems beim Sammeln von Daten nicht absichtlich ändern.

Das Betriebssystem ruft diese Routine viel seltener relativ zu Aufrufen von DxgkDdiGetDisplayStateNonIntrusiveauf. In den meisten Fehlerszenarien ruft das Betriebssystem zunächst DxgkDdiGetDisplayStateNonIntrusive auf und ruft dann DxgkDdiGetDisplayStateIntrusive auf, um sicherzustellen, dass alle unbeabsichtigten Auswirkungen des intrusiven Aufrufs nicht auf die nicht intrusive Datensammlung wirken.

DXGKRNL ruft diese Routine mit NumOfTargets auf, auf die Anzahl der Ziele festgelegt ist, für die das Betriebssystem meldet, dass ein Monitor mit den entsprechenden VidPnTargetId ausgefüllt ist. Wenn der Treiber der Ansicht ist, dass kein Monitor mit einem bestimmten Ziel verbunden ist, sollte er die ReturnSubStatus- festlegen, damit dieses Ziel DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED wird.

Anmerkung

Wenn der Treiber bei einem bestimmten Vidpntarget bei der Erfassung von Informationen auf einen Fehler trifft, sollte er ReturnSubStatus- verwenden, um den Fehlerstatus festzulegen und mit dem nächsten Vidpntarget fortzufahren und den Gesamtaufruf nicht fehlzuschlagen, es sei denn, alle Pfade haben Fehler. Im Idealfall sollten Während dieses Aufrufs Fehler in einem internen Fehlerprotokoll aufgezeichnet werden, sodass diese Fehler als Teil einer internen Protokollauflistung erfasst werden, wenn das Betriebssystem DxgkDdiCollectDiagnosticInfo zum Sammeln von Black box-Informationen erfasst wird, werden diese Fehler als Teil einer internen Protokollsammlung erfasst, um das Debuggen von IHVs zu erleichtern.

Das Betriebssystem verfügt über ein ausreichendes Timeout (ca. 5 Sekunden) für DxgkDdiGetDisplayStateIntrusive, sodass der Treiber mehr Zeit zum Sammeln des gesamten relevanten Zustands hat. Nach einem Timeout kann das Betriebssystem den Computer fehlerchecken und ein Dump sammeln, wenn der Treiber in diesem Aufruf hängt, sodass der Miniport versuchen sollte, diesen Aufruf immer innerhalb des Zeitrahmens abzuschließen.

Die Synchronisierungsebene für diesen DDI ist Synchronisierung auf Nullebene.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10, Version 2004
Header- dispmprt.h

Siehe auch

DXGKARG_GETDISPLAYSTATEINTRUSIVE

DxgkDdiCollectDiagnosticInfo

DxgkDdiGetDisplayStateNonIntrusive

DxgkDdiQueryInterface