Bindungszustände eines Protokolltreibers
Ein NDIS-Protokolltreiber muss die folgenden Betriebszustände für jede Bindung unterstützen, die der Treiber verwaltet:
Ungebunden
Öffnen
Wird ausgeführt
Schließen
Status „Wird angehalten“
Angehalten
Neustarten
Die folgenden Abbildungen zeigen die Beziehung zwischen diesen Zuständen.
Im Folgenden werden die Bindungszustände des Protokolltreibers definiert:
Der Unbound-Zustand ist der Anfangszustand einer Bindung. In diesem Zustand wartet der Protokolltreiber, bis NDIS die ProtocolBindAdapterEx-Funktion aufruft . Nachdem NDIS ProtocolBindAdapterEx aufgerufen hat, wechselt die Bindung in den Zustand Öffnen. Nachdem ein vorgang ohne Bindung abgeschlossen ist, kehrt eine Bindung vom Zustand Schließen in den Zustand Unbound zurück.
Im Öffnen-Zustand weist ein Protokolltreiber Ressourcen für die Bindung zu und versucht, den Miniportadapter zu öffnen. Nachdem NDIS die ProtocolBindAdapterEx-Funktion des Treibers aufgerufen hat, wechselt die Bindung in den Zustand Öffnen. Wenn der Protokolltreiber nicht an den Miniportadapter gebunden werden kann, kehrt die Bindung in den Unbound-Zustand zurück. Wenn der Treiber erfolgreich an den Miniportadapter gebunden wird, wird die Bindung in den Zustand Angehalten versetzt.
Im Ausführungszustand führt ein Protokolltreiber die normale Sende- und Empfangsverarbeitung für eine Bindung aus. Wenn sich die Bindung im Zustand Neustarten befindet und der Treiber bereit ist, Sende- und Empfangsvorgänge auszuführen, wechselt die Bindung in den Status Ausführen.
Im Zustand Schließen schließt der Protokolltreiber die Bindung an den Miniportadapter und gibt dann die Ressourcen für die Bindung frei. Nachdem NDIS die ProtocolUnbindAdapterEx-Funktion des Protokolltreibers aufgerufen hat, wechselt die Bindung in den Zustand Schließen. Nachdem der Protokolltreiber die nicht gebundenen Vorgänge abgeschlossen hat, wechselt die Bindung in den Unbound-Zustand.
Im Zustand Pausing schließt ein Protokolltreiber alle Vorgänge ab, die zum Beenden von Sende- und Empfangsvorgängen für eine Bindung erforderlich sind. Wenn sich eine Bindung im Status "Ausgeführt" befindet und NDIS dem Protokolltreiber eine PnP-Pausenbenachrichtigung sendet, wechselt die Bindung in den Zustand Anhalten. Der Protokolltreiber muss warten, bis alle ausstehenden Sendeanforderungen abgeschlossen sind. Ein Protokolltreiber kann bei einem Pausenvorgang nicht fehlschlagen. Nach Abschluss des Pausenvorgangs wechselt die Bindung in den Zustand Angehalten.
Im Zustand Angehalten führt der Protokolltreiber keine Sende- oder Empfangsvorgänge für eine Bindung aus. Wenn sich eine Bindung im Zustand Pausing befindet und ein Angehalten-Vorgang abgeschlossen ist, wechselt die Bindung in den Zustand Angehalten. Wenn sich eine Bindung im Zustand Öffnen befindet und ein geöffneter Vorgang erfolgreich abgeschlossen wurde, wechselt die Bindung in den Zustand Angehalten. Wenn NDIS dem Protokolltreiber eine PnP-Neustartbenachrichtigung für die Bindung sendet, wechselt die Bindung in den Status Neustarten. Wenn NDIS die ProtocolUnbindAdapterEx-Funktion des Treibers aufruft, wechselt die Bindung in den Zustand Schließen.
Im Zustand Neustart schließt ein Protokolltreiber alle Vorgänge ab, die zum Neustart von Sende- und Empfangsvorgängen für eine Bindung erforderlich sind. Wenn sich eine Bindung im Zustand Angehalten befindet und NDIS dem Protokolltreiber eine PnP-Neustartbenachrichtigung sendet, wechselt die Bindung in den Status Neustarten. Wenn beim Neustart ein Fehler auftritt, kehrt die Bindung in den Zustand Angehalten zurück. Wenn der Neustart erfolgreich ist, wechselt die Bindung in den Status "Ausgeführt".