Sdílet prostřednictvím


Zpracování oznámení o selektivním pozastavení nečinnosti NDIS

NDIS spustí selektivní pozastavení operace, pokud dojde k jedné z následujících událostí:

  • Síťový adaptér je neaktivní po delší dobu než doba nečinnosti. Doba trvání tohoto časového limitu je určena hodnotou standardizovaného klíčového slova INF *SSIdleTimeout. Další informace o tomto klíčovém slově naleznete v tématu Standardizovaná klíčová slova INF pro selektivní pozastavení NDIS.

    Další informace o tom, jak NDIS určuje, že je síťový adaptér nečinný, najdete v tématu Zjištění nečinných síťových adaptérů NDIS.

  • Systém, který je kompatibilní s technologií Always On Always Connected (AOAC), je převáděn do stavu připojeného pohotovostního režimu.

Prostřednictvím selektivní operace pozastavení se síťový adaptér převedou do stavu nízkého výkonu. NDIS tuto operaci zahájí voláním funkce obslužné rutiny MiniportIdleNotification k vydání oznámení nečinnosti pro ovladač miniportu.

Ovladač miniportu může potřebovat provádět akce závislé na sběrnici, když zpracovává oznámení o nečinnosti. Následující obrázek znázorňuje kroky, které se týkají zpracování nečinných oznámení ovladačem miniportu pro síťový adaptér USB.

Diagram operace oznámení o nečinnosti

Toto téma obsahuje následující informace o tom, jak zpracovat selektivní pozastavení oznámení o nečinnosti NDIS:

Pokyny pro zpracování volání MiniportIdleNotification

Pokyny pro volání NdisMIdleNotificationConfirm

Zrušení a dokončení selektivního oznámení o pozastavení nečinnosti NDIS

Pokyny pro zpracování volání miniportIdleNotification

NDIS a ovladač miniportu postupují podle těchto kroků, když NDIS volá MiniportIdleNotification:

  1. NDIS volá obslužnou funkci MiniportIdleNotification, která upozorní ovladač na to, že příslušný síťový adaptér je nečinný. NDIS nastaví parametr ForceIdle funkce obslužné rutiny MiniportIdleNotification na jednu z následujících hodnot:

    • NDIS nastaví parametr ForceIdle na HODNOTU FALSE , pokud je síťový adaptér neaktivní po delší dobu, než je období časového limitu nečinnosti.

    • NDIS nastaví parametr ForceIdle na TRUE , pokud systém, který je kompatibilní s technologií AlwaysOn Always Connected (AOAC), přechází do stavu připojeného pohotovostního režimu.

  2. Při zavolání MiniportIdleNotification může ovladač miniportu odmítnout oznámení o nečinnosti a operaci selektivního pozastavení vrácením hodnoty NDIS_STATUS_BUSY. Ovladač může například vetovat nečinné oznámení, pokud ovladač zjistí aktivitu na síťovém adaptéru.

    Pokud ovladač miniportu vetos oznámení nečinnosti, NDIS restartuje monitorování aktivity na síťovém adaptéru. Pokud se adaptér v době časového limitu nečinnosti znovu stane neaktivním, NDIS volá MiniportIdleNotification.

    Poznámka Ovladač miniportu nesmí vetovat nečinné oznámení, pokud je parametr ForceIdle nastaven na HODNOTU TRUE. V tomto případě musí ovladač pokračovat v procesu selektivního pozastavení.

  3. Pokud ovladač miniportu nedotá oznámení nečinnosti, musí provést jakékoli operace specifické pro sběrnici, aby se síťový adaptér připravil na selektivní pozastavení operace. Například ovladač miniportu pro síťový adaptér USB provede následující kroky a určí, jestli může síťový adaptér přejít do stavu s nízkou spotřebou:

    1. Ovladač miniportu volá IoCallDriver k vydání paketu vstupně-výstupních požadavků (IRP) pro požadavek NA nečinnost USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) na základní ovladač sběrnice USB. V tomto protokolu IRP musí ovladač miniportu zadat rutinu zpětného volání a dokončení.

      Ovladač sběrnice USB nedokončuje IRP okamžitě. IRP zůstává ve stavu čekání během přechodu do režimu nízké spotřeby energie. Řidič autobusu dokončí IRP později, když dojde k některé z následujících událostí:

      • Ovladač miniportu zruší IRP.

      • Je vyžadována změna stavu napájení systému.

      • Zařízení se odebere z rozbočovače USB.

    2. Jakmile ovladač sběrnice USB zjistí, že může síťový adaptér umístit do nízkého stavu napájení, volá rutinu zpětného volání IRP ovladače miniportu. Toto volání potvrzuje, že síťový adaptér může přejít do stavu nízkého napájení.

      Pokyny k zápisu rutiny zpětného volání pro IRP žádosti o nečinnost USB naleznete v tématu Implementace rutiny zpětného volání IRP žádosti o nečinnost USB.

  4. Jakmile ovladač miniportu dokončí přípravu síťového adaptéru pro selektivní operaci pozastavení, volá NdisMIdleNotificationConfirm. V tomto volání ovladač miniportu určuje nejnižší stav napájení, na který může síťový adaptér přejít.

    V závislosti na požadavcích sběrnice pro selektivní pozastavení operací volá ovladač miniportu NdisMIdleNotificationConfirm buď synchronně v kontextu volání MiniportIdleNotification nebo asynchronně po vrácení MiniportIdleNotification. Například ovladač miniportu pro síťový adaptér USB volá NdisMIdleNotificationConfirm v kontextu rutiny zpětného volání pro požadavek nečinnosti USB. Ovladač sběrnice USB volá rutinu zpětného volání buď synchronně v kontextu volání ioCallDriver , nebo asynchronně po vrácení MiniportIdleNotification .

  5. Pokud lze síťový adaptér převést do stavu nízkého výkonu, ovladač miniportu vrátí NDIS_STATUS_PENDING z volání MiniportIdleNotification.

    Poznámka Ovladač miniportu vrátí NDIS_STATUS_PENDING, protože nečinné oznámení není dokončeno, dokud ovladač nevolá NdisMIdleNotificationComplete. Ovladač miniportu nesmí z MiniportIdleNotification vracet NDIS_STATUS_SUCCESS.

Ovladač miniportu by měl provádět následující operace, dokud není síťový adaptér pozastaven a převeden do stavu nízké spotřeby energie.

Pokyny pro volání NdisMIdleNotificationConfirm

Ovladač NDIS a miniportu se řídí tímto postupem, když ovladač miniportu volá NdisMIdleNotificationConfirm:

  1. NDIS vyšle IRP_MN_WAIT_WAKE podkladovému ovladači sběrnice. Tento protokol IRP umožňuje ovladači sběrnice probudit síťový adaptér v reakci na externí signál probuzení.

  2. NDIS vydává požadavek na nastavení identifikátoru objektu (OID) OID_PM_PARAMETERS na ovladač miniportu. Tento požadavek OID je přidružený ke struktuře NDIS_PM_PARAMETERS , která určuje nastavení, pod kterým síťový adaptér generuje událost probuzení.

    Ovladač miniportu musí při zpracování členů struktury NDIS_PM_PARAMETERS dodržovat tyto pokyny:

    • Pokud byl parametr ForceIdle funkce obslužné rutiny MiniportIdleNotification nastaven na hodnotu FALSE, NDIS nastaví pouze příznak NDIS_PM_SELECTIVE_SUSPEND_ENABLED v členu NDIS_PM_PARAMETERS struktury jako WakeUpFlags. V tomto případě může síťový adaptér signalizovat událost probuzení, když dojde k jedné z následujících událostí:

      • Síťový adaptér obdrží paket, který odpovídá filtru paketů příjmu. Adaptér je nakonfigurovaný tak, aby tyto filtry používal prostřednictvím požadavků sady identifikátorů OID_GEN_CURRENT_PACKET_FILTER.

      • Síťový adaptér detekuje další externí události, které vyžadují zpracování zásobníkem síťových ovladačů, například když se stav propojení změní na odpojení média nebo připojení média.

    • Pokud byl parametr ForceIdle funkce obslužné rutiny MiniportIdleNotification nastaven na HODNOTU TRUE, NDIS nenastaví příznak NDIS_PM_SELECTIVE_SUSPEND_ENABLED v wakeUpFlagsčlenu NDIS_PM_PARAMETERS struktury. V tomto případě NDIS nastaví další členy ve struktuře NDIS_PM_PARAMETERS pro události probuzení, které nesouvisí se selektivním pozastavením NDIS.

      Poznámka NDIS nastaví parametr ForceIdle na HODNOTU TRUE pouze v případě, že systém, který je kompatibilní s technologií AlwaysOn Always Connected (AOAC), přechází do stavu připojeného pohotovostního režimu.

      Ovladač dokončí požadavek OID s výsledkem NDIS_STATUS_SUCCESS.

      Poznámka Pokud NDIS nastaví příznak NDIS_PM_SELECTIVE_SUSPEND_ENABLED ve členovi WakeUpFlagsstruktury NDIS_PM_PARAMETERS, vydá požadavek sady identifikátorů OID_PM_PARAMETERS přímo ovladači miniportu. To umožňuje NDIS obejít zpracování pomocí ovladačů filtru v zásobníku síťových ovladačů.

  3. Po úspěšném dokončení požadavku na nastavení OID_PM_PARAMETERS NDIS vydá požadavek na nastavení OID_PNP_SET_POWER k ovladači miniportu.

    Při zpracování tohoto požadavku sady identifikátorů ovladač připraví síťový adaptér na přechod do stavu nízkého výkonu, který je zadaný v požadavku OID. Ovladač musí dokončit všechny čekající operace následujícím způsobem:

    • Ovladač miniportu čeká na vrácení všech dříve uvedených paketů prostřednictvím volání MiniportReturnNetBufferLists.

    • Ovladač miniportu čeká na dokončení odesílání požadavků zpracovaných hardwarem. Po dokončení požadavků musí ovladač miniportu zavolat NdisMSendNetBufferListsComplete.

    • Ovladač miniportu dokončí všechny požadavky čekající na odeslání voláním NdisMSendNetBufferListsComplete.

    • Ovladač miniportu musí zrušit všechny čekající časovače NDIS a pracovní položky. Po zrušení musí ovladač počkat na dokončení těchto časovačů a pracovních položek.

    • Ovladač miniportu musí síťový adaptér umístit do stavu nečinnosti. Ovladač například musí zrušit všechny časovače hardwaru.

    Ovladač miniportu nakonfiguruje základní síťový adaptér tak, aby umožňoval zadané události probuzení, které byly dříve zadány v požadavku sady identifikátorů OID_PM_PARAMETERS. Jakmile je síťový adaptér připraven na přechod do režimu nízké spotřeby, miniportový ovladač dokončí požadavek na nastavení OID OID_PNP_SET_POWER s NDIS_STATUS_SUCCESS.

  4. NDIS vydává IRP_MN_SET_POWER podkladovému ovladači sběrnice. Tento protokol IRP vyžaduje přechod síťového adaptéru do stavu nízkého výkonu.

    Poznámka Během selektivní operace pozastavení se síťový adaptér přepne do stavu napájení zařízení, který byl zadán ve volání NdisMIdleNotificationConfirm. Ovladač miniportu určuje tento stav napájení zařízení v parametru IdlePowerState této funkce.

Po dokončení IRP se NDIS vrátí z volání NdisMIdleNotificationConfirm.

Zrušení a dokončení selektivního oznámení o pozastavení nečinnosti NDIS

Po vystavení nečinného oznámení je možné ho zrušit a dokončit následujícími způsoby:

  • Pokud jsou splněny následující podmínky, může NDIS zrušit nevyřízených oznámení nečinnosti:

    • Přílišný protokol nebo ovladač filtru vydává požadavek na odeslání paketu nebo požadavek OID na ovladač miniportu.

    • Základní adaptér signalizuje událost probuzení, například příjem paketu, který odpovídá vzoru wake-on-LAN (WOL) nebo zjištění změny ve stavu připojení k médiím.

    NDIS ruší oznámení o nečinnosti voláním MiniportCancelIdleNotification. Když je volána tato funkce obslužné rutiny, ovladač miniportu zruší všechny požadavky IRP specifické pro sběrnici, které mohl dříve vydat pro oznámení o nečinnosti. Nakonec ovladač miniportu volá NdisMIdleNotificationComplete k dokončení oznámení nečinnosti.

    Další informace o tom, jak NDIS zruší oznámení o nečinnosti, najdete v tématu Selektivní pozastavení NDIS oznámení o nečinnosti.

  • Jakmile je síťový adaptér ve stavu nízkého výkonu, může ovladač miniportu dokončit oznámení o nečinnosti, aby se adaptér obnovil do stavu plného napájení. Důvody, proč to udělat, jsou specifické pro návrh a požadavky ovladače a adaptéru. Ovladač miniportu dokončí oznámení nečinnosti voláním NdisMIdleNotificationComplete.

    Další informace o tom, jak miniport-ovladač dokončí oznámení o nečinnosti, zjistíte v Completing the NDIS Selective Suspend Idle Notification.