Freigeben über


OID_PNP_SET_POWER

Der OID_PNP_SET_POWER OID benachrichtigt einen Miniporttreiber, dass sein zugrunde liegender Netzwerkadapter in den im InformationBuffer-angegebenen Gerätestromzustand übergeht. Der Gerätestromzustand 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 nicht angehalten und die NDIS-Treiber im Treiberstapel während der Energiezustandsübergänge 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 einen Zeiger an diese Struktur im Aufruf der NdisMSetMiniportAttributes Funktion.

  • Alle übermäßigen Filtertreiber, die an den Miniporttreiber angefügt sind, unterstützen NDIS 6.30 oder höhere Versionen von NDIS.

  • Alle übermäßigen Protokolltreiber, die an den Miniporttreiber gebunden sind, unterstützen NDIS 6.30 oder höhere Versionen von NDIS.

Übergang zu einem Low-Power Status (D1-D3)

Wenn der Miniporttreiber eine festgelegte Anforderung von OID_PNP_SET_POWER verarbeitet, um in einen Energiesparzustand zu wechseln, muss folgendes ausgeführt werden:

  • Bereiten Sie den Netzwerkadapter vollständig auf den angegebenen Netzgeräte-Energiezustand 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 sollen.

  • Warten Sie, bis sendeanforderungen vom Netzwerkadapter verarbeitet wurden. Nach Abschluss muss der Miniporttreiber die NdisMSendNetBufferListsComplete-Funktion aufrufen. Der Treiber sollte den Status Member 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_STATEfestlegen.

  • Alle neuen Sendeanforderungen, die an ihre MiniportSendNetBufferLists Funktion gesendet wurden, werden sofort abgelehnt, indem Sie die funktion NdisMSendNetBufferListsComplete aufrufen. Der Treiber muss das Statuselement in jeder NET_BUFFER_LIST Struktur auf NDIS_STATUS_LOW_POWER_STATEfestlegen.

Der Miniporttreiber, der NDIS 6.30 und höhere Versionen von NDIS unterstützt, muss auch folgendes ausführen:

  • Warten Sie nicht, bis der Abschluss der ausstehenden Empfangsanzeigen durch Aufrufe der MiniportReturnNetBufferLists Funktion erfolgt. Außerdem darf der Miniporttreiber die NET_BUFFER_LIST Struktur oder die Daten für alle Pakete, die auf den Abschluss warten, nicht ändern.

  • Behandeln Sie die OID_PNP_SET_POWER Anforderung an einen Energiesparzustand aus den Status "Angehalten" oder "Running adapter". 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 unter der Steuerung des Miniporttreibers deaktivieren, indem die folgenden Aufgaben ausgeführt werden:

  • Deaktivieren Sie Unterbrechungen und das DMA-Modul auf dem Netzwerkadapter.

  • Beenden Sie das Empfangsmodul auf dem Netzwerkadapter.

  • Behandeln Oder ändern Sie keine Empfangsdeskriptoren und Paketpuffer, die mit ausstehenden Empfangsanzeigen verknüpft sind.

  • Alle NDIS-Zeitgeber abbrechen.

Hinweis Ein Miniporttreiber kann nicht auf den Netzwerkadapter zugreifen, nachdem der Bustreiber den Netzwerkadapter in den D3-Zustand umgestellt hat.

Übergang zum Full-Power-Zustand (D0)

Wenn der Miniporttreiber eine festgelegte Anforderung von OID_PNP_SET_POWER verarbeitet, um in einen Vollstromzustand zu wechseln, muss das Empfangsmodul des Netzwerkadapters in denselben Zustand wiederhergestellt werden, in dem sich das Empfangsmodul befand, bevor der Adapter in den Energiesparmodus umgestellt wurde.

Hinweis Der Miniporttreiber darf nicht auf Empfangspuffer zugreifen oder ändern, die mit ausstehenden Empfangsanzeigen verknüpft sind.

NDIS ruft die MiniportRestart- funktion des Miniporttreibers nach dem Übergang in einen Vollstromzustand 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 an eine Abfrage von OID_PNP_SET_POWER zurückgeben. Ein Zwischentreiber sollte niemals eine OID_PNP_SET_POWER Anforderung an einen zugrunde liegenden Miniporttreiber weitergeben.

Rückgabestatuscodes

Die MiniportOidRequest Funktion des Miniporttreibers gibt einen der folgenden Werte für diese Anforderung zurück:

Ausdruck 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 die Anforderung erfolgreich ausgeführt werden, indem die NdisMOidRequestComplete--Funktion aufgerufen wird und NDIS_STATUS_SUCCESS für den parameter Status übergeben wird.

NDIS_STATUS_NOT_ACCEPTED

Der Miniporttreiber wird zurückgesetzt.

Anforderungen

Version

Unterstützt für NDIS 5.1 und NDIS 6.0 und höher.

Kopfball

Ntddndis.h (include Ndis.h)

Siehe auch


MiniportInitializeEx-

MiniportPause-

MiniportRestart-

MiniportReturnNetBufferLists

MiniportSendNetBufferLists

NDIS_DEVICE_POWER_STATE

NdisMIndicateReceiveNetBufferLists

NdisMSendNetBufferListsComplete-

NET_BUFFER_LIST