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