MB Operational Semantics
Asynchrone Transaktionen
Das MB-Treibermodell setzt eine nicht blockierende operative Semantik zwischen den MB-Dienst- und Miniporttreibern voraus, indem der in NDIS 6.x bereitgestellte asynchrone Benachrichtigungsmechanismus verwendet wird. Dieser Mechanismus ermöglicht es dem MB-Dienst, weiterhin OID-Anforderungen zur Verarbeitung an den Miniporttreiber zu senden, ohne auf den Abschluss des aktuellen Vorgangs zu warten.
Eine asynchrone Transaktion ist ein Drei-Wege-Handshake, der mit der ersten Anforderung beginnt, gefolgt von einer Anforderung status Antwort und dann durch eine endgültige Transaktionsanzeige abgeschlossen wird. Die Anforderung status Antwort ist vorläufig, da sie nur bestätigt, dass der Miniporttreiber die Anforderung erhalten hat. Der asynchrone Nachverfolgungshinweis ist transaktional, da er den Abschluss der Transaktion signalisiert. Der Miniporttreiber gibt den status Code sowie die resultierenden Daten in der Transaktionsanzeige zurück.
Asynchrone Set- und Abfrageanforderungen
Viele der vom MB-Dienst verwendeten Set- und Abfrage-OID-Anforderungen werden asynchron verarbeitet. Weitere Informationen zum Festlegen und Abfragen von OID-Anforderungen finden Sie unter NDIS_OID_REQUEST. Die Tabelle "WWAN-spezifische OIDs" im Thema MB-Datenmodell gibt an, welche OIDs asynchron verarbeitet werden.
Das folgende Diagramm stellt die Interaktionssequenz für eine asynchrone Abfragetransaktion zwischen dem MB-Dienst und dem Miniporttreiber dar. Die fett formatierten Bezeichnungen stellen OID-Bezeichner oder Transaktionsflusssteuerung dar, und die Bezeichnungen im regulären Text stellen die wichtigen Flags innerhalb der OID-Struktur dar.
Der Drei-Wege-Handshake ist für Abfrage- und Setanforderungen identisch.
Mit Ausnahme von OID_WWAN_DRIVER_CAPS folgen alle anderen MB-spezifischen OID-Anforderungen dem asynchronen Transaktionsmechanismus für den Informationsaustausch zwischen Miniporttreibern und dem MB-Dienst mit den folgenden zusätzlichen Hinweisen:
Miniporttreiber sollten eine OID-Anforderung sofort bei jeder Fehlerbedingung fehlschlagen, z. B. bei einer ungültigen OID-Anforderung.
Miniporttreiber müssen alle WWAN-spezifischen Fehlerbedingungen mit dem richtigen Fehlercode (z. B. WWAN_STATUS_XXX) zurückgeben, der im uStatus-Member der Ereignisbenachrichtigungsstruktur angegeben ist. Miniport-Treiber sollten auch die Mitglieder, die dem uStatus-Mitglied folgen, bei Bedarf entsprechend ausfüllen. Miniporttreiber sollten beispielsweise das Element ContextState.uNwError der NDIS_WWAN_CONTEXT_STATE-Struktur ausfüllen, sofern verfügbar. Im Falle eines Fehlers bei der Verarbeitung von OIDs im Zusammenhang mit PINs verfügen Miniporttreiber möglicherweise nicht unbedingt über die aktuellen PIN-Statusinformationen, die im PinInfo.PinState-Member von NDIS_WWAN_PIN_INFO angegeben werden müssen.
Miniporttreiber sollten NDIS_STATUS_INDICATION_REQUIRED als vorläufige Antwort für alle asynchronen OID-Anforderungen zurückgeben.
Miniporttreiber sollten in der Lage sein, Gerätezustandsänderungen, die durch eine OID-Anforderung verursacht werden, von anderen Ursachen zu unterscheiden. Miniport-Treiber sollten Transaktionsbenachrichtigungen für Zustandsänderungen senden, die sich aus OID-Anforderungen ergeben, und sie sollten nicht angeforderte Ereignisbenachrichtigungen für Zustandsänderungen aus anderen Ursachen senden.
Miniporttreiber sind für die Verwaltung des Kernelmodusspeichers verantwortlich, obwohl der MB-Dienst den Arbeitsspeicher zunächst für Anforderungen zuweist. Nachdem der MB-Dienst eine Antwort von einem Miniporttreiber empfangen hat, gibt der Dienst möglicherweise den Benutzermodusspeicher frei, den er für die OID-Anforderung zugewiesen hat.
Das folgende Diagramm stellt die Interaktionssequenz für eine asynchrone Settransaktion zwischen dem MB-Dienst und dem Miniporttreiber dar. Die fett formatierten Bezeichnungen stellen OID-Bezeichner oder Transaktionsflusssteuerung dar, und die Bezeichnungen im regulären Text stellen die wichtigen Flags innerhalb der OID-Struktur dar.
Asynchrone Antwort
Mit der NDIS 6.0-Spezifikation (veröffentlicht mit Windows Vista) wurde ein neuer status-Code eingeführt, NDIS_STATUS_INDICATION_REQUIRED für Miniporttreiber, um die asynchrone Natur einer Transaktion an den MB-Dienst in der vorläufigen Antwort eines Miniporttreibers auf eine OID-Anforderung zu übermitteln.
Wie in der Übersicht über die MB-Schnittstelle erwähnt, hat der MB-Dienst keinen direkten Zugriff auf den Kernelmodusspeicher, der von einem MB-Miniporttreiber zugewiesen wird. Es wird davon ausgegangen, dass das im Kernelmodusspeicher gespeicherte Ausführungsergebnis von einem Vermittler wie WMI oder einem NDIS-Filtertreiber kopiert und dem MB-Dienst zur Verfügung gestellt wird. Daher können Miniporttreiber den zugeordneten Kernelmodusspeicher freigeben, nachdem der NdisMIndicateStatusEx-Funktionsaufruf in der Transaktionsanzeige zurückgegeben wird.
Die Handshakeprozeduren, die Miniporttreiber und der MB-Dienst befolgen müssen, werden im folgenden Verfahren beschrieben.
MB-Miniporttreiberprozedur
Beim Empfang einer OID-Anforderung sollten Miniporttreiber die folgenden Schritte ausführen:
Ordnen Sie Arbeitsspeicher im Kernelmodus zu, um den Inhalt der NDIS_OID_REQUEST Datenstruktur zu kopieren, die der OID-Anforderung zugeordnet ist.
Stellen Sie unter den Parametern der Anforderung sicher, dass auch die Member RequestId und RequestHandle der OID-Anforderungsstruktur kopiert werden. Diese Member werden später in der Transaktionsanzeige verwendet.
Geben Sie eine vorläufige NDIS_STATUS_INDICATION_REQUIRED status Antwort zurück, um den MB-Dienst darüber zu informieren, dass der Miniporttreiber die Anforderung asynchron abschließen wird.
Speichern Sie das Ergebnis nach Abschluss des Vorgangs je nach Bedarf im lokalen oder vom Treiber zugewiesenen Speicher.
Rufen Sie die NdisMIndicateStatusEx-Funktion auf, um den MB-Dienst darüber zu informieren, dass der ausstehende Vorgang abgeschlossen wurde. Miniporttreiber sollten die Elemente der NDIS_STATUS_INDICATION-Struktur wie folgt ausfüllen:
- Legen Sie das StatusCode-Element auf den Typ status Benachrichtigung fest. Beispiel: NDIS_STATUS_WWAN_XXX.
- Legen Sie den DestinationHandle-Member auf den RequestHandle-Member fest, der in der NDIS_OID_REQUEST Datenstruktur empfangen wurde, als der Miniporttreiber die entsprechende OID-Anforderung empfangen hat.
- Legen Sie den RequestId-Member so fest, dass er mit dem RequestId-Member der NDIS_OID_REQUEST status-Struktur übereinstimmt, wenn der Miniporttreiber die entsprechende OID-Anforderung empfangen hat.
- Legen Sie die Member StatusBuffer und StatusBufferSize so fest, dass sie auf den vom Miniporttreiber zugewiesenen Arbeitsspeicher bzw. die Größe des Speicherpuffers verweisen. Dieser Speicherpuffer enthält das Ergebnis des abgeschlossenen Vorgangs.
- Wenn der Vorgang erfolgreich abgeschlossen wurde, legen Sie den uStatus-Member auf WWAN_STATUS_SUCCESS fest. Legen Sie andernfalls den uStatus-Member auf den entsprechenden WWAN_STATUS_XXX Wert fest, um den Typ des Fehlers anzugeben.
Wenn der Funktionsaufruf zurückgegeben wird, sollte der Miniporttreiber den Speicher freigeben, den er für die OID-Anforderung zugewiesen hat.
MB-Dienstprozedur
Der MB-Dienst verarbeitet asynchrone Transaktionen mit dem folgenden Verfahren:
Ordnen Sie pufferspeicher für die Anforderung basierend auf der OID-Datenstruktur zu. Füllen Sie die Datenstrukturmember mit entsprechenden Werten aus.
Rufen Sie die NdisOidRequest-Funktion mit dem InformationBuffer-Member auf, der auf die OID-Datenstruktur für die OID-Anforderung verweist, und warten Sie, bis der Miniporttreiber antwortet.
Nach Erhalt einer NDIS_STATUS_INDICATION_REQUIRED vorläufigen Antwort vom Miniporttreiber speichert der MB-Dienst die RequestId, gibt den zugewiesenen Arbeitsspeicher frei und markiert die Transaktion als geöffnet. Zu diesem Zeitpunkt kann der MB-Dienst nachfolgende OID-Anforderungen und Benachrichtigungen verarbeiten.
Überprüfen Sie nach Erhalt einer Benachrichtigung mit NDIS_STATUS_WWAN_XXX als StatusCode-Wert , ob die RequestId mit der einer als geöffnet markierten Transaktion übereinstimmt. Wenn eine Übereinstimmung vorhanden ist, schließt der Dienst die Transaktion. Wenn keine Übereinstimmung gefunden wird, behandeln Sie die Benachrichtigung als nicht angeforderte Ereignisbenachrichtigung.
Verarbeiten Sie die im StatusBuffer-Member zurückgegebenen Daten, und nehmen Sie bei Bedarf Zustandsänderungen am MB-Dienst vor.
Angaben
Es gibt zwei Arten von WWAN-spezifischen Hinweisen , die Miniporttreiber generieren können:
Ereignisbenachrichtigungen, die sich aus einer Objektstatusänderung auf dem MB-Gerät ergeben.
Transaktionsbenachrichtigungen, die den Abschluss eines asynchronen Vorgangs signalisieren.
In beiden Fällen sollten Miniporttreiber die Funktion NdisMIndicateStatusEx aufrufen.
Ereignisbenachrichtigung
Ereignisbenachrichtigungen werden nicht angefordert, da der Miniporttreiber die Anzeige proaktiv als Zustandsänderungsereignis an den MB-Dienst sendet. Die Zustandsänderung wird durch eine Aktion von einer anderen Entität als dem MB-Dienst verursacht. Der MB-Dienst geht davon aus, dass Miniporttreiber in der Lage sind, die Ursache der Änderung zu erkennen.
Für jede WWAN-spezifische Ereignisbenachrichtigung müssen Miniporttreiber den RequestId-Member der NDIS_STATUS_INDICATION-Struktur auf 0 festlegen. Das StatusCode-Element gibt an, welches Objekt auf dem MB-Gerät geändert wurde. Der Miniporttreiber kann dieses Objekt auf einen der folgenden Werte festlegen:
NDIS_STATUS_WWAN_HOME_PROVIDER
NDIS_STATUS_WWAN_PREFERRED_PROVIDERS
NDIS_STATUS_WWAN_VISIBLE_PROVIDERS
NDIS_STATUS_WWAN_REGISTER_STATE
NDIS_STATUS_WWAN_PACKET_SERVICE
NDIS_STATUS_WWAN_CONTEXT_STATE
NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS
NDIS_STATUS_WWAN_SERVICE_ACTIVATION
NDIS_STATUS_WWAN_SMS_CONFIGURATION
NDIS_STATUS_WWAN_VENDOR_SPECIFIC
Der MB-Dienst kann auch andere Ereignisbenachrichtigungen von NDIS verarbeiten. Diese Nicht-MB-Ereignisbenachrichtigungen unterliegen nicht unbedingt der Anforderung, dass ihre RequestId-Werte auf 0 festgelegt werden.
Transaktionsbenachrichtigungen
Miniporttreiber verwenden Transaktionsbenachrichtigungen, um den MB-Dienst darüber zu informieren, dass eine asynchrone Transaktion abgeschlossen wurde, und der MB-Dienst verwendet Transaktionsbenachrichtigungen, um geöffnete Transaktionen zu schließen und seinen Zustandscomputer zu aktualisieren.
Der MB-Dienst erwartet Transaktionsbenachrichtigungen, damit er geöffnete Transaktionen schließen kann. Dies ist der letzte Austausch des Drei-Wege-Handshakes zwischen dem MB-Dienst und dem Miniporttreiber in einer asynchronen Transaktion. Der Wert des RequestId-Members des NDIS_STATUS_INDICATION in jeder Transaktionsbenachrichtigung muss nonzero sein, der aus der entsprechenden Anforderung in derselben Transaktion kopiert wird.
Sie müssen das RequestId-Element der NDIS_STATUS_INDICATION-Struktur ordnungsgemäß festlegen, damit der asynchrone Mechanismus ordnungsgemäß funktioniert. Der MB-Dienst stellt sicher, dass der RequestId-Wert eindeutig und unter allen ausstehenden Anforderungen nicht eindeutig ist. Miniport-Treiber müssen denselben RequestId-Wert in der entsprechenden Anzeige zurückgeben, damit der MB-Dienst die Anzeige mit einer geöffneten Transaktion korrelieren kann.
Struktur der Statusanzeige
Sowohl die asynchrone Antwort für eine bestimmte OID-Anforderung als auch die nicht angeforderten Ereignisbenachrichtigungsstrukturen verwenden die folgenden Strukturmember, auf die vom StatusBuffer-Member des StatusIndication-Parameters an NdisMIndicateStatusEx verwiesen wird:
typedef struct _NDIS_WWAN_XXX {
NDIS_OBJECT_HEADER Header;
WWAN_STATUS uStatus;
ULONG uNwError;//Optional. Only used for network operations.
WWAN_XXX XxxStruct;
} NDIS_WWAN_XXX, *PNDIS_WWAN_XXX;
Ein Wert von 0 im RequestId-Member der NDIS_STATUS_INDICATION-Struktur bedeutet, dass es sich um eine nicht angeforderte Ereignisbenachrichtigung handelt und jederzeit auftreten kann.
Wenn das uStatus-Element in der zurückgegebenen Angabe einer OID-Anforderung nicht WWAN_STATUS_SUCCESS entspricht, müssen die Member der zugeordneten NDIS_WWAN_XXX Struktur nicht gültig sein.
Bei nicht angeforderten Ereignisbenachrichtigungen, die auf Netzwerkereignissen basieren, müssen Miniporttreiber ggf. den uNwError-Member ausfüllen.
In der folgenden Tabelle sind die Werte für Registrierung, Paketanfügung und Pakettrennen aufgeführt, die in der 3GPP TS 24.008-Spezifikation für GSM-basierte Netzwerke definiert sind:
3GPP 24.008 Ursachencode | Interpretation von Ursachecode |
---|---|
2 : International Mobile Subscriber Identity (IMSI) unbekannt in HLR |
Entweder die SIM-Karte oder das Gerät ist nicht aktiviert, oder das Abonnement ist abgelaufen, was zu einer Netzwerkabschaltung führte. |
4 – IMSI in VLR unbekannt |
Das Roamingfeature ist nicht abonniert. |
6 – Illegales ME |
MS wird durch das Netzwerk aufgrund eines gestohlenen Berichts blockiert. |
7 – GPRS-Dienste nicht zulässig |
Der Benutzer verfügt nicht über ein GPRS-Abonnement. Der Benutzer verfügt nur über ein Sprachverbindungsabonnement. |
8 : GPRS- und Nicht-GPRS-Dienste sind nicht zulässig |
GPRS- und Nicht-GPRS-Dienste sind nicht zulässig. |
11 – PLMN nicht zulässig |
Der Dienst wird vom Netzwerk aufgrund eines abgelaufenen Abonnements oder einer anderen Ursache blockiert. |
12 – Standortbereich nicht zulässig |
Das Benutzerabonnement lässt den Zugriff im aktuellen Standortbereich nicht zu. |
13 : Roaming in diesem Standortbereich nicht zulässig |
Das Abonnement lässt Roaming zu, das Roaming ist jedoch im aktuellen Standortbereich nicht zulässig. |
14 – GPRS-Dienste in diesem PLMN nicht zulässig |
Der ausgewählte Netzwerkanbieter stellt dem MS keinen GPRS-Dienst zur Verfügung. |
15 - Keine geeigneten Zellen im Standortbereich |
Kein Abonnement für den Dienst. |
17 : Netzwerkfehler |
Fehler bei der Registrierung. |
22 – Überlastung |
Fehler bei der Registrierung aufgrund von Netzwerküberlastung. |
Wenn das Netzwerk beispielsweise ein Kontextereignis deaktiviert, weil roaming im Standortbereich nicht zulässig ist, sollten Miniporttreiber den uNwError-Member gemäß den 3GPP TS 24.008 Cause-Codes für GSM-basierte Netzwerke auf 13 festlegen.
Eine ähnliche Logik sollte auch auf CDMA-basierte Netzwerke angewendet werden. Es gibt jedoch keinen Standard für CDMA-basierte Netzwerkfehlercodes. CDMA-basierte Geräte sollten die netzwerkspezifischen oder gerätespezifischen Fehlercodes verwenden.
Im Fall der asynchronen Antwort eines Miniporttreibers auf OID-Anforderungen ist das RequestId-Member der NDIS_STATUS_INDICATION-Struktur eine Nicht-Null-Zahl, die als Teil einer Set - oder Abfrageanforderung an den Miniporttreiber übergeben wurde. Der Miniporttreiber muss den uStatus-Member entsprechend ausfüllen. Beispielsweise WWAN_STATUS_SUCCESS oder einen der im folgenden Abschnitt aufgeführten entsprechenden Fehlerwerte. Darüber hinaus muss der Miniporttreiber den uNwError-Member ausfüllen, sofern zutreffend und verfügbar.
Ereignisbenachrichtigungsstatus
In der folgenden Tabelle sind die WWAN_STATUS Codes aufgeführt, die MB-Miniporttreiber im uStatus-Member der NDIS_WWAN_XXX Ereignisbenachrichtigungsstrukturen angeben können.
Wert | Bedeutung |
---|---|
WWAN_STATUS_SUCCESS |
Der Vorgang wurde erfolgreich ausgeführt. |
WWAN_STATUS_FAILURE |
Fehler beim Vorgang (generischer Fehler). |
WWAN_STATUS_BUSY |
Fehler beim Vorgang, weil das Gerät ausgelastet ist. |
WWAN_STATUS_SIM_NOT_INSERTED |
Der Vorgang ist fehlgeschlagen, da die SIM-Karte nicht vollständig in das Gerät eingefügt wurde. |
WWAN_STATUS_BAD_SIM |
Der Vorgang ist fehlgeschlagen, weil die SIM-Karte schlecht ist und nicht weiter verwendet werden kann. |
WWAN_STATUS_PIN_REQUIRED |
Fehler beim Vorgang, da eine PIN eingegeben werden muss, um fortzufahren. |
WWAN_STATUS_PIN_DISABLED |
Fehler beim Vorgang, da die PIN deaktiviert ist. |
WWAN_STATUS_NOT_REGISTERED |
Der Vorgang ist fehlgeschlagen, da das Gerät nicht bei einem Netzwerk registriert ist. |
WWAN_STATUS_PROVIDERS_NOT_FOUND |
Der Vorgang ist fehlgeschlagen, da keine Netzwerkanbieter gefunden wurden. |
WWAN_STATUS_NO_DEVICE_SUPPORT |
Fehler beim Vorgang, da das Gerät den Vorgang nicht unterstützt. |
WWAN_STATUS_PROVIDER_NOT_VISIBLE |
Fehler beim Vorgang, da der Dienstanbieter derzeit nicht sichtbar ist. |
WWAN_STATUS_DATA_CLASS_NOT_AVAILABLE |
Fehler beim Vorgang, weil die angeforderte Datenklasse nicht verfügbar war. |
WWAN_STATUS_PACKET_SVC_DETACHED |
Fehler beim Vorgang, weil der Paketdienst getrennt ist. |
WWAN_STATUS_MAX_ACTIVATED_CONTEXTS |
Fehler beim Vorgang, weil die maximale Anzahl aktivierter Kontexte erreicht wurde. |
WWAN_STATUS_NOT_INITIALIZED |
Der Vorgang ist fehlgeschlagen, da sich das Gerät gerade in der Initialisierung befindet. Wiederholen Sie den Vorgang, nachdem sich der Bereitzustand des Geräts in WwanReadyStateInitialized geändert hat. |
WWAN_STATUS_VOICE_CALL_IN_PROGRESS |
Fehler beim Vorgang, weil ein Sprachanruf ausgeführt wird. |
WWAN_STATUS_CONTEXT_NOT_ACTIVATED |
Fehler beim Vorgang, weil der Kontext nicht aktiviert ist. |
WWAN_STATUS_SERVICE_NOT_ACTIVATED |
Fehler beim Vorgang, weil der Dienst nicht aktiviert ist. |
WWAN_STATUS_INVALID_ACCESS_STRING |
Fehler beim Vorgang, da die Zugriffszeichenfolge ungültig ist. |
WWAN_STATUS_INVALID_USER_NAME_PWD |
Fehler beim Vorgang, da der angegebene Benutzername und/oder das angegebene Kennwort ungültig sind. |
WWAN_STATUS_RADIO_POWER_OFF |
Fehler beim Vorgang, da das Radio derzeit ausgeschaltet ist. |
WWAN_STATUS_INVALID_PARAMETERS |
Der Vorgang ist aufgrund ungültiger Parameter fehlgeschlagen. |
WWAN_STATUS_READ_FAILURE |
Der Vorgang ist aufgrund eines Lesefehlers fehlgeschlagen. |
WWAN_STATUS_WRITE_FAILURE |
Der Vorgang ist aufgrund eines Schreibfehlers fehlgeschlagen. |
In der folgenden Tabelle sind SMS-spezifische status Werte aufgeführt.
Wert | Bedeutung |
---|---|
WWAN_STATUS_SMS_OPERATION_NOT_ALLOWED |
Der SMS-Vorgang ist fehlgeschlagen, da der Vorgang nicht zulässig ist. |
WWAN_STATUS_SMS_MEMORY_FAILURE |
Der SMS-Vorgang ist aufgrund eines Speicherfehlers fehlgeschlagen. |
WWAN_STATUS_SMS_INVALID_MEMORY_INDEX |
Der SMS-Vorgang ist aufgrund eines ungültigen Speicherindexes – WwanSmsFlagIndex für OID_WWAN_SMS_READ – fehlgeschlagen. |
WWAN_STATUS_SMS_UNKNOWN_SMSC_ADDRESS |
Beim SMS-Vorgang ist ein Fehler aufgetreten, da die Servicecenternummer entweder ungültig oder unbekannt ist. |
WWAN_STATUS_SMS_NETWORK_TIMEOUT |
Der SMS-Vorgang ist aufgrund eines Netzwerktimeouts fehlgeschlagen. |
WWAN_STATUS_SMS_MEMORY_FULL |
Fehler beim SMS-Vorgang, weil der SMS-Nachrichtenspeicher voll ist. |
WWAN_STATUS_SMS_UNKNOWN_ERROR |
Fehler beim SMS-Vorgang aufgrund eines unbekannten Fehlers (generischer Fehler). |
WWAN_STATUS_SMS_FILTER_NOT_SUPPORTED |
Fehler beim SMS-Vorgang, da der angeforderte Filtertyp nicht unterstützt wird. |
WWAN_STATUS_SMS_MORE_DATA |
Diese Transaktion ist noch nicht abgeschlossen. Einige Daten wurden zurückgegeben, und es müssen weitere Daten zurückgegeben werden. |
WWAN_STATUS_SMS_LANG_NOT_SUPPORTED |
Fehler beim SMS-Vorgang, da die SMS-Sprache nicht unterstützt wird. Dies gilt nur für CDMA-basierte Geräte. |
WWAN_STATUS_SMS_ENCODING_NOT_SUPPORTED |
Fehler beim SMS-Vorgang, da die SMS-Codierung nicht unterstützt wird. Dies gilt nur für CDMA-basierte Geräte. |
WWAN_STATUS_SMS_FORMAT_NOT_SUPPORTED |
Fehler beim SMS-Vorgang, da das SMS-Format nicht unterstützt wird. |
Hinweis Diese WWAN-spezifischen status-Codes werden nur für asynchrone Transaktionen im uStatus-Member der NDIS_WWAN_XXX-Strukturen verwendet.
Miniport-Treiber verwenden Ereignisbenachrichtigungen, um den MB-Dienst über eine Objektstatusänderung auf ihrem MB-Gerät zu informieren, ohne zuvor eine OID-Anforderung erhalten zu haben. Der MB-Dienst verwendet Ereignisbenachrichtigungen, um nur seinen Zustandscomputer zu aktualisieren.
Beachten Sie, dass miniport-Treiber die Antworten möglicherweise nicht in derselben Reihenfolge zurückgeben, während NDIS alle Anforderungen serialisiert, die an Miniporttreiber gesendet werden. Dies liegt daran, dass die Anforderungen in der Warteschlange im Miniporttreiber möglicherweise parallel verarbeitet werden. Daher stellt der MB-Dienst sicher, dass die zweite Anforderung erst gesendet wird, wenn zwei Anforderungen voneinander abhängig sind, bis der Miniporttreiber die erste Anforderung abgeschlossen hat.
Statusänderungsbenachrichtigung
Im Allgemeinen sollten Miniporttreiber den MB-Dienst immer über den aktualisierten Status ihres MB-Geräts benachrichtigen, entweder über Transaktionsbenachrichtigungen oder über nicht angeforderte Ereignisbenachrichtigungen. Die folgenden Szenarien sind einige Ausnahmen, in denen Miniporttreiber nicht mit aktualisierten Zustandsinformationen reagieren sollen. Der MB-Dienst kann den aktualisierten Zustand anhand der Abschluss-status anderer Vorgänge ermitteln:
Miniporttreiber müssen keine NDIS_STATUS_WWAN_PIN_LIST Ereignisanzeige senden, wenn PIN-Statusänderungen auftreten, da der MB-Dienst die Aktivierung oder Deaktivierung der PIN angefordert hat.
Miniporttreiber müssen die aktualisierte Liste der bereitgestellten Kontexte in Transaktionsantworten auf OID_WWAN_PROVISIONED_CONTEXT festgelegte Vorgänge nicht zurückgeben.
Miniporttreiber müssen nicht mit der aktualisierten Liste der bevorzugten Anbieter in Transaktionsantworten auf OID_WWAN_PREFERRED_PROVIDERS Festlegen von Vorgängen reagieren. Der MB-Dienst kann diese Informationen basierend auf der anfänglichen Liste und dem Erfolg status des Setvorgangs ermitteln.
Miniporttreiber müssen nicht mit dem aktuellen WWAN_SMS_CONFIGURATION Wert für OID_WWAN_SMS_CONFIGURATION Festlegen von Vorgängen reagieren.