DXGKDDI_GETDISPLAYSTATENONINTRUSIVE Rückruffunktion (dispmprt.h)
Das Betriebssystem ruft die DxgkDdiGetDisplayStateNonIntrusive Routine eines Display-Miniporttreibers auf, um nicht fortlaufend Anzeigestatusinformationen vom Treiber zu sammeln.
Syntax
DXGKDDI_GETDISPLAYSTATENONINTRUSIVE DxgkddiGetdisplaystatenonintrusive;
NTSTATUS DxgkddiGetdisplaystatenonintrusive(
[in] HANDLE Context,
[in/out] PDXGKARG_GETDISPLAYSTATENONINTRUSIVE pArgs
)
{...}
Parameter
[in] Context
Zeiger auf einen privaten Kontext, der von DxgkDdiQueryInterfacezurückgegeben wird.
[in/out] pArgs
Zeiger auf eine DXGKARG_GETDISPLAYSTATENONINTRUSIVE Struktur.
Rückgabewert
DxgkDdiGetDisplayStateNonIntrusive 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 DxgkDdiGetDisplayStateNonIntrusive auf, um Anzeigestatusinformationen vom Treiber zu sammeln. Im Gegensatz zu DxgkDdiGetDisplayStateIntrusivesollte die DxgkDdiGetDisplayStateNonIntrusive Routine keine Vorgänge ausführen, die sichtbare Nebenwirkungen für den Benutzer verursachen, und der Sammlungsprozess sollte relativ schnell sein (idealerweise innerhalb weniger Millisekunden). Die Anruffrequenz dieser Routine ist relativ hoch. Abgesehen davon, dass ein fehlerhafter Benutzerzustand diagnostiziert wird, kann das Betriebssystem diese Routine auch zum Aufzeichnen von Verlaufszustandsinformationen vom Treiber für Debuggingzwecke verwenden.
In seltenen Fällen, in denen eine plattformspezifische Implementierung erfordert, dass der Treiber intrusive Vorgänge als Teil eines Aufrufs an DxgkDdiGetDisplayStateNonIntrusiveausführt, sollte der Treiber die Vorgänge ausführen, muss jedoch pArgs->ReturnSubStatus- auf DXGK_DIAG_GETDISPLAYSTATE_CAUSED_GLITCH oder entsprechend DXGK_DIAG_GETDISPLAYSTATE_CHANGED_DISPLAY_STATE festlegen. Basierend auf dem ReturnSubStatus- Wert kann das Betriebssystem (Betriebssystem) diese Routine nur für Fehlerszenarien in einem bestimmten System aufrufen.
Das Betriebssystem ruft DxgkDdiGetDisplayStateNonIntrusive häufig (entweder in regelmäßigen Abständen oder auf anderen häufig auftretenden Ereignissen) auf, um Treiberstatusdaten für Debuggingzwecke zu sammeln und sich die historische Zeitachse anzusehen. Das Betriebssystem ruft diese Routine auch in bestimmten Fehlerszenarien (z. B. schwarze Bildschirme) auf, bevor detailliertere Informationen gesammelt werden, indem sie DxgkDdiGetDisplayStateIntrusiveaufrufen. Angesichts der möglichen Häufigkeit dieses Anrufs sollten Treiber ihn so schnell wie möglich abschließen. Das Betriebssystem ruft diesen DDI mit NumOfTargets auf, auf die maximale Anzahl von Zielen festgelegt wird, die vom angegebenen Grafikadapter unterstützt werden, und VidPnTargetId ausgefüllt. Der Miniporttreiber sollte nur die Anzeigezustandsinformationen für Ziele ausfüllen, auf denen tatsächlich ein Monitor angeschlossen ist. Bei einem Vidpntarget, auf dem kein Monitor angeschlossen ist, sollte der Miniport nur DXGK_DIAG_DISPLAY_CONNECTIVITY ausfüllen, und das Betriebssystem ignoriert alle anderen Felder für dieses Ziel.
Anmerkung
Treiber sollten nur ReturnSubStatus- verwenden, um Fehlerbedingungen zu melden und keine DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED zum Melden des Verbindungszustands zu verwenden. Der Hauptzweck von DXGK_DIAG_GETDISPLAYSTATE_MONITOR_NOT_CONNECTED ist für aufdringliche Anrufe, bei denen das Betriebssystem nicht nach Monitorkonnektivität fragt.
Wenn der Treiber bei einem bestimmten Vidpntarget beim Sammeln von Informationen auf einen Fehler stößt, 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 treffen Fehler. Treiber sollten fehler, die während dieses Aufrufs in einem internen Fehlerprotokoll gefunden werden, idealerweise aufzeichnen, damit diese Fehler im Rahmen einer internen Protokollsammlung erfasst werden, um IHVs während des Debugvorgangs zu unterstützen, wenn das Betriebssystem DxgkDdiCollectDiagnosticInfo zum Sammeln von Black Box-Informationen aufruft.
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_GETDISPLAYSTATENONINTRUSIVE