OID_PNP_SET_POWER
Die OID_PNP_SET_POWER OID benachrichtigt einen Miniporttreiber, dass der zugrunde liegende Netzwerkadapter in den im InformationBuffer angegebenen Gerätestromzustand übergeht. Der Geräteleistungszustand wird als einer der folgenden NDIS_DEVICE_POWER_STATE Werte angegeben:
- NdisDeviceStateD0
- NdisDeviceStateD1
- NdisDeviceStateD2
- NdisDeviceStateD3
Einer OID_PNP_SET_POWER Anforderung kann eine OID_PNP_QUERY_POWER Anforderung vorangestellt werden.
Ab NDIS 6.30 wird NDIS die NDIS-Treiber im Treiberstapel während der Energiezustandsübergänge nicht angehalten und neu gestartet, wenn die folgenden Bedingungen zutreffen:
Der zugrunde liegende Miniporttreiber legt das NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND-Flag in der NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES-Struktur fest. Der Treiber übergibt in seinem Aufruf der Funktion NdisMSetMiniportAttributes einen Zeiger auf diese Struktur.
Alle überlastenden Filtertreiber, die an den Miniporttreiber angefügt sind, unterstützen NDIS 6.30 oder höhere Versionen von NDIS.
Alle überlastenden Protokolltreiber, die an den Miniporttreiber gebunden sind, unterstützen NDIS 6.30 oder höhere Versionen von NDIS.
Übergang zu einem Low-Power Zustand (D1-D3)
Wenn der Miniporttreiber eine festgelegte Anforderung von OID_PNP_SET_POWER verarbeitet, um in einen Energiesparzustand zu wechseln, muss er die folgenden Schritte ausführen:
Bereiten Sie den Netzwerkadapter vollständig auf den angegebenen Netzgerätezustand vor. Die Aufgabe, die vom Miniporttreiber ausgeführt wird, um dies zu erreichen, ist geräteabhängig.
Warten Sie, bis Aufrufe der NdisMIndicateReceiveNetBufferLists-Funktion zurückgegeben werden.
Warten Sie, bis die vom Netzwerkadapter verarbeiteten Sendeanforderungen abgeschlossen sind. Nach Abschluss des Vorgangs muss der Miniporttreiber die Funktion NdisMSendNetBufferListsComplete aufrufen. Der Treiber sollte den Statusmember in jeder NET_BUFFER_LIST Struktur auf den entsprechenden NDIS_STATUS_Xxx-Wert festlegen.
Schließen Sie alle ausstehenden Sendeanforderungen ab, indem Sie die Funktion NdisMSendNetBufferListsComplete aufrufen. Der Treiber muss das Statuselement in jeder NET_BUFFER_LIST-Struktur auf NDIS_STATUS_LOW_POWER_STATE festlegen.
Lehnen Sie alle neuen Sendeanforderungen an die MiniportSendNetBufferLists-Funktion sofort ab, indem Sie die Funktion NdisMSendNetBufferListsComplete aufrufen. Der Treiber muss das Statuselement in jeder NET_BUFFER_LIST-Struktur auf NDIS_STATUS_LOW_POWER_STATE festlegen.
Der Miniporttreiber, der NDIS 6.30 und höhere Versionen von NDIS unterstützt, muss auch folgendes tun:
Warten Sie nicht auf den Abschluss ausstehender Empfangsanzeigen durch Aufrufe der MiniportReturnNetBufferLists-Funktion . Außerdem darf der Miniporttreiber die NET_BUFFER_LIST Struktur oder Daten für Pakete, die auf den Abschluss warten, nicht ändern.
Behandeln Sie die OID_PNP_SET_POWER Anforderung in einen Energiesparzustand aus dem Adapterstatus Angehalten oder Ausgeführt. Weitere Informationen zu diesen Zuständen finden Sie unter Miniport-Adapterzustände und -vorgänge.
Bevor der Netzwerkadapter in den D3-Zustand wechselt, muss der Miniporttreiber alles deaktivieren, was unter der Kontrolle des Miniporttreibers liegt, indem er die folgenden Aufgaben ausführt:
Deaktivieren Sie Interrupts und die DMA-Engine auf dem Netzwerkadapter.
Beenden Sie die Empfangs-Engine auf dem Netzwerkadapter.
Behandeln Oder ändern Sie keine Empfangsdeskriptoren und Paketpuffer, die ausstehenden Empfangsanzeigen zugeordnet sind.
Brechen Sie alle NDIS-Timer ab.
Hinweis Ein Miniporttreiber kann nicht auf den Netzwerkadapter zugreifen, nachdem der Bustreiber den Netzwerkadapter in den D3-Zustand übergestellt hat.
Übergang zum Full-Power Zustand (D0)
Wenn der Miniporttreiber eine festgelegte Anforderung von OID_PNP_SET_POWER verarbeitet, um in einen Zustand mit voller Leistung zu wechseln, muss er die Empfangs-Engine des Netzwerkadapters in den zustand wiederherstellen, in dem sich die Empfangs-Engine befand, bevor der Adapter in den Zustand mit niedriger Leistung übergeht.
Hinweis Der Miniporttreiber darf nicht auf Empfangspuffer zugreifen oder ändern, die ausstehenden Empfangsanzeigen zugeordnet sind.
NDIS ruft die MiniportRestart-Funktion des Miniporttreibers nach dem Übergang in einen Vollleistungszustand nur auf, wenn NDIS die MiniportPause-Funktion des Treibers vor dem Übergang zu einem Energiesparzustand aufgerufen hat.
Hinweis Ein Zwischentreiber muss immer NDIS_STATUS_SUCCESS zu einer Abfrage mit OID_PNP_SET_POWER zurückgeben. Ein Zwischentreiber sollte niemals eine OID_PNP_SET_POWER Anforderung an einen zugrunde liegenden Miniporttreiber weitergeben.
Zurückgeben status Codes
Die MiniportOidRequest-Funktion des Miniporttreibers gibt einen der folgenden Werte für diese Anforderung zurück:
Begriff | BESCHREIBUNG |
---|---|
NDIS_STATUS_SUCCESS |
Der Miniporttreiber hat die Anforderung erfolgreich abgeschlossen. |
NDIS_STATUS_PENDING |
Der Miniporttreiber führt die Anforderung asynchron aus. Nachdem der Miniporttreiber die gesamte Verarbeitung abgeschlossen hat, muss er die Anforderung erfolgreich ausführen, indem er die NdisMOidRequestComplete-Funktion aufruft und NDIS_STATUS_SUCCESS für den Status-Parameter übergibt. |
NDIS_STATUS_NOT_ACCEPTED |
Der Miniporttreiber wird zurückgesetzt. |
Requirements (Anforderungen)
Version |
Unterstützt für NDIS 5.1 und NDIS 6.0 und höher. |
Header |
Ntddndis.h (include Ndis.h) |
Weitere Informationen
NdisMIndicateReceiveNetBufferLists