Condividi tramite


Completamento della notifica di sospensione selettiva NDIS

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

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

  • NDIS annulla la notifica inattiva chiamando la funzione del gestore MiniportCancelIdleNotification del driver miniport sottostante.

  • Il driver miniport completa la notifica inattiva stessa. I motivi di questa operazione sono specifici per la progettazione e i requisiti del driver e dell'adattatore. Ad esempio, il driver potrebbe completare la notifica inattiva se rileva l'attività di ricezione nella scheda di rete.

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

In entrambi i casi, il driver miniport deve completare la notifica di inattività per riprendere l'adattatore in uno stato di alimentazione completa. Per completare la notifica inattiva, il driver miniport deve annullare eventuali pacchetti di richiesta I/O specifici del bus (IRP) che potrebbero essere stati rilasciati in precedenza per la notifica inattiva. 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 in sospeso (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) IRP. Il driver miniport ha precedentemente rilasciato 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 viene 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 passata a uno stato di alimentazione completa.

    Per altre informazioni su come implementare una routine di completamento di una richiesta di inattività USB, vedere Implementazione di una routine di completamento IRP richiesta di inattività 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 la restituzione di MiniportCancelIdleNotification .

Dopo che il driver miniport annulla qualsiasi IRP specifico del bus per la notifica inattiva, chiama NdisMIdleNotificationComplete. Questa chiamata informa NDIS che la notifica inattiva è 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 la procedura seguente:

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

  2. NDIS genera 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 alimentazione completa di NdisDeviceStateD0.

    Quando gestisce questa richiesta di set OID, il driver prepara l'adattatore per l'operazione di alimentazione completa. Ciò include il ripristino del motore di ricezione e invio allo stesso stato in cui erano presenti prima della transizione allo stato a bassa potenza. Il driver completa quindi la richiesta OID con NDIS_STATUS_SUCCESS.

Nella figura seguente vengono illustrati i passaggi coinvolti quando il driver miniport completa una notifica inattiva 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 inattiva, non deve chiamare NdisMIdleNotificationConfirm per una notifica inattiva completata in precedenza tramite una chiamata a NdisMIdleNotificationComplete.