Condividi tramite


Completamento della notifica di inattività di sospensione selettiva NDIS

NDIS chiama la funzione gestore MiniportIdleNotification per notificare al driver che la scheda di rete sottostante sembra essere inattiva. Per ulteriori informazioni su questa operazione, vedere Gestione della notifica di inattività selettiva NDIS.

Dopo l'emissione della notifica di inattività, il driver miniport completa la notifica di sospensione selettiva per inattività di NDIS in base alle condizioni seguenti:

  • NDIS annulla la notifica di inattività chiamando la funzione gestore MiniportCancelIdleNotification del driver miniport sottostante.

  • Il driver miniport completa la notifica di inattività da solo. I motivi per eseguire questa operazione sono specifici della progettazione e dei requisiti del driver e dell'adattatore. Ad esempio, il driver potrebbe completare la notifica di inattività se rileva l'attività di ricezione sulla scheda di rete.

Nota Il driver miniport non può annullare in modo esplicito la notifica di inattività. Quando NDIS annulla la notifica di inattività, il driver miniport deve completare la notifica come descritto in questo argomento. Per altre informazioni, vedere Annullamento della notifica di inattività selettiva NDIS.

In entrambi i casi, il driver miniport deve completare la notifica di inattività per riportare l'adattatore a uno stato di piena potenza. Per completare la notifica di inattività, il driver miniport deve annullare eventuali pacchetti di richiesta di I/O specifici del bus (IRP) che potrebbero essere stati rilasciati in precedenza per la notifica di inattività. Infine, il driver chiama NdisMIdleNotificationComplete per notificare a NDIS che la scheda di rete può essere passata a uno stato di alimentazione completa.

Ad esempio, il driver miniport per una scheda di rete USB completa una notifica inattiva seguendo questa procedura:

  1. Il driver miniport annulla la richiesta di inattività USB pendente (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. Il driver miniport aveva emesso in precedenza questo IRP al driver del bus USB sottostante quando NDIS ha chiamato la funzione MiniportIdleNotification del driver . Il driver miniport annulla questo IRP chiamando IoCancelIrp.

  2. Quando il driver del bus annulla l'IRP della richiesta di inattività USB, chiama la routine di completamento del driver miniport per l'IRP. Questa chiamata notifica al driver che l'IRP è stata completata e la scheda di rete può passare a uno stato di alimentazione completa. Dal contesto della routine di completamento, il driver chiama NdisMIdleNotificationComplete per notificare a NDIS che la scheda di rete può essere portata a uno stato di piena potenza.

    Per ulteriori informazioni su come implementare una routine di completamento IRP di richiesta inattiva USB, vedere Implementazione della routine di completamento IRP di richiesta inattiva USB.

Nota A seconda delle dipendenze per annullare le richieste di inattività specifiche del bus, il driver miniport chiama NdisMIdleNotificationComplete in modo sincrono nel contesto della chiamata a MiniportCancelIdleNotification o in modo asincrono dopo che MiniportCancelIdleNotification restituisce.

Una volta che il driver miniport ha annullato tutti gli IRP specifici del bus per la notifica di inattività, chiama NdisMIdleNotificationComplete. Questa chiamata notifica all'NDIS che la notifica di inattività è stata completata. NDIS completa quindi l'operazione di sospensione selettiva passando la scheda di rete a uno stato di alimentazione completa.

Quando viene chiamato NdisMIdleNotificationComplete, NDIS esegue i passaggi seguenti:

  1. NDIS emette IRP_MN_SET_POWER al driver del bus sottostante. Questo protocollo IRP richiede al driver del bus di impostare lo stato di alimentazione della scheda di rete su PowerDeviceD0.

  2. NDIS emette una richiesta di set di identificatori di oggetto (OID) di OID_PNP_SET_POWER al driver miniport. In questa richiesta OID, NDIS specifica che la scheda di rete sta ora passando a uno stato di piena alimentazione denominato NdisDeviceStateD0.

    Quando gestisce questa richiesta di set OID, il driver prepara l'adattatore per il funzionamento a piena potenza. Ciò include il ripristino dei motori di ricezione e invio allo stesso stato in cui si trovavano prima della transizione allo stato a basso consumo. Il driver completa quindi la richiesta OID con NDIS_STATUS_SUCCESS.

La figura seguente illustra i passaggi necessari quando il driver miniport completa una notifica di inattività per una scheda di rete USB.

Diagramma che illustra i passaggi necessari per completare una notifica inattiva per una scheda di rete USB.

Nota Quando il driver miniport completa una notifica di inattività, non deve chiamare NdisMIdleNotificationConfirm per una notifica di inattività completata in precedenza tramite una chiamata a NdisMIdleNotificationComplete.