Freigeben über


Steuern des Status eines allgemeinen E/A-Ziels

Sie können E/A-Zielobjekte so visualisieren, dass sie zwei Gates haben: ein In-Gate und ein Out-Gate. Die Out-Gate-Steuerung, wenn das Framework eine Anforderung an das Zielgerätobjekt übermittelt, während die In-Gate-Steuerung steuert, wenn eine Anforderung überhaupt in das E/A-Ziel gelangen darf.

Das Framework definiert die folgenden Zustände für allgemeine E/A-Ziele:

Begann
Beide Gates des E/A-Zielobjekts sind geöffnet. Der Treiber kann E/A-Anforderungen an die E/A-Zielwarteschlange senden, und das Framework übermittelt die Anforderungen an den entsprechenden Treiber.

Gestoppt
Das In-Gate des E/A-Ziels ist offen, aber das Out-Gate ist geschlossen. Das Framework beendet die Übermittlung von Anforderungen an den entsprechenden Treiber. Um E/A-Anforderungen an das E/A-Ziel zu senden, muss der Treiber entweder WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE oder WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET in der WDF_REQUEST_SEND_OPTIONS Struktur jeder Anforderung festlegen.

Gelöscht
Beide Gates des E/A-Zielobjekts sind geschlossen. Der Treiber kann keine E/A-Anforderungen an das E/A-Ziel senden, es sei denn, er legt WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE oder WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET fest. Darüber hinaus bricht das Framework nicht verarbeitete Anforderungen in der internen Warteschlange des E/A-Zielobjekts ab. Dieser Status ist ab KMDF-Version 1.11 verfügbar.

Geschlossen für Query-Remove
Ein Remote-E/A-Ziel wird vorübergehend geschlossen, da das Gerät möglicherweise bald entfernt wird.

Geschlossen
Das E/A-Ziel ist geschlossen und kann nicht gestartet oder beendet werden.

Gelöscht
Das Gerät des E/A-Ziels wurde entfernt.

Die WDF_IO_TARGET_STATE-Enumeration definiert die Werte, die diese Zustände darstellen. Ihr Treiber kann WdfIoTargetGetState aufrufen, um den Status eines E/A-Ziels zu erhalten.

Lokale E/A-Zielzustände

Das Framework wird automatisch geöffnet und startet lokale E/A-Ziele.

Bei Bedarf kann der Treiber WdfIoTargetStop aufrufen, um ein lokales E/A-Ziel vorübergehend zu beenden, und WdfIoTargetStart aufrufen, um es neu zu starten. Beispielsweise kann der Treiber ein lokales E/A-Ziel beenden, wenn er eine temporäre Fehlerbedingung erkennt, und dann das E/A-Ziel neu starten, wenn die Fehlerbedingung korrigiert wird.

In KMDF Version 1.11 und höher kann der Treiber WdfIoTargetPurge aufrufen, um vorübergehend zu verhindern, dass E/A-Anforderungen an ein lokales E/A-Ziel gesendet werden, und um nicht verarbeitete Anforderungen in der Warteschlange des Ziels abzubrechen. Im Rahmen der Dateihandlebereinigung kann ein Treiber beispielsweise ein lokales E/A-Ziel bereinigen, um sicherzustellen, dass alle an den Treiber gesendeten Anforderungen abgebrochen werden.

Wenn das Gerät eines lokalen E/A-Ziels entfernt wird, beendet und schließt das Framework automatisch das E/A-Ziel und bricht alle E/A-Anforderungen ab, die sich in der Warteschlange des Ziels befinden. Das Framework benachrichtigt den Treiber, dass das Gerät nicht mehr verfügbar ist, indem Die Rückruffunktionen für Geräteobjektereignisse aufgerufen werden. Weitere Informationen zu diesen Rückruffunktionen finden Sie unter PnP- und Energieverwaltungsszenarien.

Remote-E/A-Zielzustände

Treiber müssen WdfIoTargetOpen aufrufen, um Remote-E/A-Ziele zu öffnen. Wenn ein Treiber ein Remote-E/A-Ziel öffnet, startet das Framework das E/A-Ziel automatisch.

Bei Bedarf kann der Treiber WdfIoTargetStop aufrufen, um ein Remote-E/A-Ziel vorübergehend zu beenden, und WdfIoTargetStart aufrufen, um es neu zu starten.

In KMDF Version 1.11 und höher kann der Treiber WdfIoTargetPurge aufrufen, um vorübergehend zu verhindern, dass E/A-Anforderungen an ein Remote-E/A-Ziel gesendet werden, und um nicht verarbeitete Anforderungen in der Warteschlange des Ziels abzubrechen.

Wenn das Gerät eines Remote-E/A-Ziels entfernt wird, stoppt und schließt das Framework das E/A-Ziel automatisch und bricht alle E/A-Anforderungen ab, die sich in der Warteschlange des Ziels befinden, es sei denn, der Treiber registriert die folgenden Ereignisrückruffunktionen:

EvtIoTargetQueryRemove
Informiert den Treiber darüber, dass das Gerät eines Remote-E/A-Ziels möglicherweise entfernt wird. Ihr Treiber muss WdfIoTargetCloseForQueryRemove aufrufen, wenn der Treiber das Entfernen des Geräts zulassen soll.

EvtIoTargetRemoveComplete
Informiert den Treiber darüber, dass das Gerät eines Remote-E/A-Ziels entfernt wurde. Diese Rückruffunktion muss WdfIoTargetClose aufrufen.

EvtIoTargetRemoveCanceled
Informiert den Treiber darüber, dass der Versuch, das Gerät eines Remote-E/A-Ziels zu entfernen, abgebrochen wurde. Diese Rückruffunktion muss WdfIoTargetOpen aufrufen, und der Treiber ruft in der Regel WDF_IO_TARGET_OPEN_PARAMS_INIT_REOPEN auf, um seine WDF_IO_TARGET_OPEN_PARAMS_INIT-Funktion zu initialisieren.

Wenn ein Treiber die Verwendung eines Remote-E/A-Ziels abgeschlossen hat und das Ziel nicht erneut verwendet wird und das Ziel keine untergeordneten Anforderungsobjekte enthält, die noch ausstehen, kann der Treiber WdfObjectDelete aufrufen, ohne zuerst WdfIoTargetClose aufzurufen. Wenn das Ziel über untergeordnete Anforderungsobjekte verfügt, die noch ausstehen, muss der Treiber WdfIoTargetClose aufrufen, bevor er WdfObjectDelete sicher aufrufen kann.