Ausgeben von Statusanzeigen für NDIS-Aktivierungsgrund

Wenn ein Miniporttreiber die NDIS-Aktivierungsursache status (NDIS_STATUS_PM_WAKE_REASON) unterstützt, muss er diese status Anzeige unmittelbar generieren, nachdem der Netzwerkadapter ein Aktivierungsereignis generiert hat und der Adapter in den Zustand "Full-Power" fortgesetzt wird.

Hinweis Unterstützung für NDIS-Aktivierungsgrund status Ist für Miniporttreiber für mobiles Breitband (MB) optional.

Der Miniporttreiber wird mit Parametern für die Energieverwaltung (Power Management, PM) über eine OID-Set-Anforderung (Object Identifier) von OID_PM_PARAMETERS konfiguriert. Diese OID-Anforderung gibt die PM-Parameter über eine NDIS_PM_PARAMETERS-Struktur an.

Die NDIS_PM_PARAMETERS-Struktur gibt die Parameter für die folgenden Arten von Aktivierungsereignissen an.

Empfangene Paketreaktivierungsereignisse
Der Netzwerkadapter generiert ein Aktivierungsereignis, wenn er ein Paket empfängt, das einem Wake-on-LAN-Muster (WOL) entspricht. WOL-Muster umfassen Folgendes:

  • Medienunabhängige WOL-Muster, z. B. Magic-Pakete oder TCP/IP-Datenmuster innerhalb der Paketnutzlast. Beispielsweise könnte die NDIS_PM_PARAMETERS-Struktur ein WOL-Muster für einen TCP SYN-Frame angeben.

  • Medienspezifische WOL-Muster, z. B. ein EAPOL-Anforderungsbezeichnerpaket oder eine SMS-Nachricht (SMS) mit mobilem Breitband (MB).

  • Wildcardmuster, die mit einem Empfangsfilter übereinstimmen, der über eine OID-Set-Anforderung von OID_GEN_CURRENT_PACKET_FILTER angegeben wird.

Hinweis Für diese Art von Aktivierungsgrund status Angabe muss der Netzwerkadapter in der Lage sein, das empfangene Paket zu speichern. Der Treiber muss das empfangene Paket innerhalb der status-Angabe zurückgeben.

WOL-Muster werden über den EnabledWoLPacketPatterns-Member der NDIS_PM_PARAMETERS-Struktur angegeben.

Medienspezifische Aktivierungsereignisse
Der Netzwerkadapter generiert aufgrund eines medienspezifischen Grunds ein Aktivierungsereignis, z. B. aufgrund einer Trennung von einer 802.11-Zugriffssteuerung (ACCESS Point, AP) oder dem Empfang einer SMS-Nachricht (Mobile Broadband, MB).

Aktivierungsereignisse dieses Typs werden über den MediaSpecificWakeUpEvents-Member der NDIS_PM_PARAMETERS-Struktur angegeben.

Medienunabhängige Aktivierungsereignisse
Der Netzwerkadapter generiert ein Aktivierungsereignis aus einem medienunabhängigen Grund, z. B. Medienverbindung oder Trennung.

Aktivierungsereignisse dieses Typs werden über den WakeUpFlags-Member der NDIS_PM_PARAMETERS-Struktur angegeben.

Wenn der Netzwerkadapter ein Aktivierungssignal generiert hat, muss der Miniporttreiber eine NDIS_STATUS_PM_WAKE_REASON status Anzeigen ausgeben. Der Treiber übernimmt dies, während er die OID-Set-Anforderung von OID_PNP_SET_POWER für den Übergang des Adapters in einen Vollstromzustand verarbeitet.

Hinweis Der Miniporttreiber muss eine NDIS_STATUS_PM_WAKE_REASON status Anzeige ausgeben, bevor er einen status Hinweis ausgibt, der sich auf das Aktivierungsereignis bezieht. Wenn das Aktivierungsereignis beispielsweise auf eine Änderung des Medienkonnektivitätszustands zurückzuführen ist, muss der Miniporttreiber eine NDIS_STATUS_LINK_STATE status Angabe ausgeben, nachdem er die NDIS_STATUS_PM_WAKE_REASON status Angezeigt hat.

Wenn der Miniporttreiber die NDIS_STATUS_PM_WAKE_REASON status Zeigt, muss er die folgenden Schritte ausführen:

  1. Der Miniporttreiber muss einen Puffer zuordnen, der groß genug ist, um Folgendes zu enthalten:

    • Eine NDIS_PM_WAKE_REASON-Struktur .

    • Eine NDIS_PM_WAKE_PACKET Struktur zusammen mit dem empfangenen Paket (Aktivierungspaket), durch das der Netzwerkadapter das Aktivierungsereignis generiert hat.

      Hinweis Der Miniporttreiber muss diesen Pufferspeicher nicht zuordnen, wenn er auf medienspezifische oder medienunabhängige Aktivierungsereignisse hinweist.

  2. Der Miniporttreiber initialisiert eine NDIS_PM_WAKE_REASON-Struktur am Anfang des Puffers. Der Treiber legt das WakeReason-Element auf einen NDIS_PM_WAKE_REASON_TYPE-Enumerationswert fest, der den Typ des Aktivierungsereignisses definiert.

    Wenn der Miniporttreiber beispielsweise ein Empfangenes Paketreaktivierungsereignis angibt, muss er das WakeReason-Element auf NdisWakeReasonPacket festlegen. Andernfalls legt der Treiber das WakeReason-Element auf den Enumerationswert fest, der das medienspezifische oder medienunabhängige Aktivierungsereignis am besten beschreibt.

  3. Wenn der miniportdriver einen NDIS_STATUS_PM_WAKE_REASON status Hinweis für ein Empfangenes Paketreaktivierungsereignis ausgibt, muss er die folgenden Schritte ausführen:

    1. Der Miniporttreiber legt das InfoBufferOffset-Element auf den Offset einer NDIS_PM_WAKE_PACKET-Struktur fest, die der NDIS_PM_WAKE_REASON-Struktur im Puffer folgt.

      Hinweis Der Miniporttreiber muss den Anfang der NDIS_PM_WAKE_PACKET-Struktur an einer 64-Bit-Grenze ausrichten.

    2. Der Miniporttreiber legt den InfoBufferSize-Member auf die Größe der NDIS_PM_WAKE_PACKET-Struktur plus die Größe des Pakets fest, das das Aktivierungsereignis verursacht hat.

    3. Der Miniporttreiber initialisiert eine NDIS_PM_WAKE_PACKET-Struktur , die der NDIS_PM_WAKE_REASON-Struktur im Puffer folgt.

      Der Miniporttreiber legt die Member der NDIS_PM_WAKE_PACKET-Struktur wie folgt fest:

      • Das PatternId-Element wird auf den Bezeichner des WOL-Musters festgelegt, das mit dem Aktivierungspaket übereinstimmt. Dieser Bezeichner wird vom PatternId-Member der NDIS_PM_WOL_PATTERN-Struktur angegeben, die während einer OID-Satzanforderung von OID_PM_ADD_WOL_PATTERN an den Treiber übergeben wird.

      • Das PatternFriendlyName-Element ist auf die vom Benutzer lesbare Beschreibung des Aktivierungsmusters festgelegt, das vom PatternId-Element angegeben wird. Dieser Wert wird vom FriendlyName-Member der NDIS_PM_WOL_PATTERN-Struktur angegeben.

        Hinweis Der Miniporttreiber muss diesen Member nicht initialisieren. NDIS legt das PatternFriendlyName-Element auf den richtigen Wert fest, bevor die NDIS_PM_WAKE_PACKET-Struktur an übergeordnete Treiber übergeben wird.

      • Das OriginalPacketSize-Element wird auf die Länge des Pakets festgelegt, wie sie vom Netzwerkadapter empfangen wird.

      • Der SavedPacketSize-Member muss auf die Länge des Pakets festgelegt werden, das über die NDIS_STATUS_PM_WAKE_REASON status Angezeigt wird.

        Hinweis Der Wert dieses Members darf nicht größer als der Wert sein, den der Miniporttreiber im MaxWoLPacketSaveBuffer-Element der NDIS_PM_CAPABILITIES-Struktur festgelegt hat. Der Treiber gibt diese Struktur zurück, wenn er seine Aktivierungspaketanzeigefunktionen meldet. Weitere Informationen finden Sie unter Reporting Wake Reason Status Indication Capabilities( Reporting Wake Reason Status Indication Capabilities).

      • Das SavedPacketOffset-Element muss auf den Offset in Byteeinheiten auf das Aktivierungspaket festgelegt werden, das der NDIS_PM_WAKE_PACKET-Struktur folgt.

        Hinweis Der Miniporttreiber muss den Start des Aktivierungspakets an einer 64-Bit-Grenze im Puffer ausrichten.

    4. Der Miniport kopiert das Aktivierungspaket in den Puffer mit dem Offset, der vom SavedPacketOffset-Element angegeben ist.

  4. Wenn der Miniporttreiber eine NDIS_STATUS_PM_WAKE_REASON status Anzeige für ein medienspezifisches oder medienunabhängiges Aktivierungsereignis ausgibt, legt er die Elemente InfoBufferOffset und InfoBufferSize der NDIS_PM_WAKE_REASON-Struktur auf Null fest.

  5. Der Miniporttreiber initialisiert eine NDIS_STATUS_INDICATION-Struktur . Der Treiber legt das StatusCode-Element auf NDIS_STATUS_PM_WAKE_REASON fest. Der Treiber legt auch den StatusBuffer-Member so fest, dass er auf den Puffer zeigt, und legt statusBufferLength auf die Länge des Puffers in Bytes fest.

  6. Der Miniporttreiber ruft NdisMIndicateStatusEx auf und übergibt einen Zeiger auf die NDIS_STATUS_INDICATION-Struktur im StatusIndication-Parameter .

Hinweis Nachdem der Miniporttreiber die NDIS_STATUS_PM_WAKE_REASON status Anzeige für ein empfangenes Paketreaktivierungsereignis ausgibt, muss er dieses empfangene Paket durch Aufrufen von NdisMIndicateReceiveNetBufferLists angeben.