Dela via


Avbryt NDIS selektiva vänteläge meddelande

Om nätverksadaptern förblir inaktiv under en tidsgräns för inaktivitet, startar NDIS den selektiva pausåtgärden. Genom den här åtgärden övergår nätverkskortet till ett lågeffektstillstånd. NDIS påbörjar den här åtgärden genom att utfärda ett viloläge-meddelande till miniportdrivrutinen. Mer information om den här åtgärden finns i Hantering av NDIS Selective Suspend Idle Notification.

NDIS anropar funktionen MiniportIdleNotification för att meddela drivrutinen att det underliggande nätverkskortet verkar vara inaktivt. När det inaktiva meddelandet har utfärdats avbryter NDIS ett väntande inaktivt meddelande om ett eller flera av följande villkor är uppfyllda:

NDIS avbryter det inaktiva meddelandet genom att anropa MiniportCancelIdleNotification hanterarfunktionen för den underliggande miniportdrivrutinen. När den här funktionen anropas måste miniportdrivrutinen slutföra idle-notifieringen för att återgå adaptern till ett fullständigt strömläge. Riktlinjer för den här processen finns i Slutföra NDIS Selective Suspend Idle Notification.

Mer information om hur du implementerar MiniportCancelIdleNotification-hanteringsfunktion finns i Implementera en MiniportCancelIdleNotification-hanteringsfunktion.

Avbrytande av inaktivitetsmeddelandet på grund av pågående drivaraktivitet

NDIS övervakar skickar begäranden och OID-begäranden som utfärdas till en miniportdrivrutin vars nätverksadapter har satts på paus och är i lågeffektsläge. När detta inträffar avbryter NDIS det aktuella vilomeddelandet så att nätverkskortet kan återgå till fullt driftläge.

NDIS och miniportdrivrutinen följer dessa steg när ett vilomeddelande avbryts:

  1. NDIS anropar funktionen MiniportCancelIdleNotification för att avbryta ett utestående inaktivt meddelande. När den här hanteringsfunktionen anropas måste miniportdrivrutinen avbryta alla bussspecifika I/O-begärandepaket (IRP) som tidigare har utfärdats för vilomeddelandet.

    När MiniportCancelIdleNotification anropas utför miniporten för ett USB-nätverkskort följande steg:

    1. Miniportdrivrutinen avbryter den väntande USB-begäran om inaktivitet (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. Miniportdrivrutinen utfärdade tidigare denna IRP till den underliggande USB-bussdrivrutinen när NDIS anropade förarens MiniportIdleNotification funktion. Miniportdrivrutinen avbryter denna IRP genom att anropa IoCancelIrp.

    2. När bussdrivrutinen avbryter den USB-tomgångsbegärans-IRP, anropar den miniportdrivarens slutförarrutin för IRP:n. Det här anropet meddelar drivrutinen att IRP har slutförts och att nätverkskortet kan övergå till ett fulleffektstillstånd. I samband med slutföranderutinen anropar drivrutinen NdisMIdleNotificationComplete för att meddela NDIS att nätverkskortet kan övergå till ett full effektläge.

    Obs Beroende på de beroenden som finns för att avbryta busspecifika inaktiva begäranden anropar miniportdrivrutinen NdisMIdleNotificationComplete antingen synkront i samband med anropet till MiniportCancelIdleNotification eller asynkront efter att MiniportCancelIdleNotification returnerar.

    Mer information om hur du implementerar en IRP-slutföranderutin för USB-inaktiv begäran finns i Implementering av en IRP-slutföranderutin för USB-inaktiv begäran.

  2. När miniportdrivrutinen avbryter alla bussspecifika IP-adresser för det inaktiva meddelandet anropas NdisMIdleNotificationComplete. Det här anropet meddelar NDIS att vilonotifieringen har slutförts. NDIS slutför sedan den selektiva pausåtgärden genom att överföra nätverkskortet till ett fulleffektstillstånd.

    När NdisMIdleNotificationComplete anropas utför NDIS följande steg:

    1. NDIS-frågor IRP_MN_SET_POWER till den underliggande bussdrivrutinen. Denna IRP begär att bussdrivrutinen anger nätverkskortets energitillstånd till PowerDeviceD0.

    2. NDIS utfärdar en OID-begäran att ange OID_PNP_SET_POWER till miniportdrivrutinen. I den här OID-begäran anger NDIS att nätverkskortet nu övergår till ett fulleffektstillstånd för NdisDeviceStateD0.

      När den hanterar denna OID-uppsättningsbegäran förbereder drivrutinen adaptern för full effekt. Detta inkluderar återställning av mottagnings- och sändningsmotorerna till samma tillstånd som de befann sig i före övergången till lågeffektstillståndet. Drivrutinen slutför sedan OID-begäran med NDIS_STATUS_SUCCESS.

Följande bild visar de steg som ingår när NDIS avbryter ett inaktivt meddelande som utfärdades till en miniportdrivrutin för ett USB-nätverkskort.

diagram som visar processen för att återuppta inaktiva meddelanden för ett USB-nätverkskort.

Avbryta meddelande om inaktivitet på grund av aktiveringshändelser

Innan nätverkskortet övergår till ett lågeffektstillstånd utfärdar NDIS en OID-uppsättningsbegäran om OID_PM_PARAMETERS till nätverkskortet. Den här OID-begäran anger vilka typer av aktiveringshändelser som adaptern kan signalera för att återuppta till ett fulleffektstillstånd. För selektivt uppehåll i NDIS är adaptern konfigurerad för att signalera någon av följande aktiveringshändelser:

NDIS och miniportdrivrutinen följer dessa steg när NDIS avbryter ett vilolägesmeddelande på grund av en aktiveringssignal som skickas ut av nätverkskortet:

  1. Busschauffören slutför IRP_MN_WAIT_WAKE som utfärdats av NDIS innan adaptern övergår till ett lägre effekttillstånd. Genom att slutföra IRP meddelar busschauffören NDIS att nätverkskortet har genererat en aktiveringssignal.

  2. NDIS anropar funktionen MiniportCancelIdleNotification för att starta åtgärden att avbryta den inaktiva notifikationen. De steg som ingår i den här åtgärden är desamma som beskrivs i Avbryta inaktiva meddelanden på grund av överdrivande drivrutinsaktivitet.

Följande bild visar till exempel de steg som ingår när NDIS avbryter ett inaktivt meddelande på grund av en aktiveringshändelse som signaleras av ett USB-nätverkskort.

diagram som visar uppvakningsprocessen för NDIS viloläge meddelande för en USB-nätverksadapter.