Gestione degli eventi PnP e degli eventi di Power Management in un driver di protocollo
Quando il sistema operativo genera un pacchetto di I/O di I/O (PnP) Plug and Play o un'IRP di risparmio energia a un oggetto dispositivo di destinazione che rappresenta una scheda di interfaccia di rete (NIC), NDIS intercetta l'IRP. NDIS indica l'evento per ogni driver del protocollo associato e ogni driver intermedio associato chiamando la funzione ProtocolNetPnPEvent del driver. Nella chiamata a ProtocolNetPnPEvent NDIS passa un puntatore a un NET_PNP_EVENT_NOTIFICATION contenente una struttura NET_PNP_EVENT . La struttura NET_PNP_EVENT descrive l'evento PnP o l'evento di risparmio energia indicato. Per altre informazioni sull'interfaccia PnP del driver del protocollo, vedere Gestione delle notifiche degli eventi PnP in un driver di protocollo.
L'elenco seguente contiene eventi PnP e power management, come indicato dal codice NetEvent nella struttura NET_PNP_EVENT:
NetEventSetPower
Indica una richiesta Set Power, che specifica che l'adattatore miniport deve passare a uno stato di alimentazione specifico. Un driver del protocollo con riconoscimento della potenza deve sempre avere esito positivo a questo evento restituendo NDIS_STATUS_SUCCESS. Un driver di protocollo precedente può restituire NDIS_STATUS_NOT_SUPPORTED per indicare che NDIS deve scollegarlo dall'adattatore miniport.
Dopo aver rilasciato la richiesta di alimentazione impostata, NDIS sospende lo stack di driver se l'adattatore miniport passa a uno stato a bassa potenza. NDIS riavvia lo stack di driver prima della richiesta set-power se l'adattatore miniport passa allo stato di lavoro (D0). Per altre informazioni sulla sospensione e il riavvio dello stack di driver, vedere Sospensione di uno stack di driver.
Se l'adattatore miniport è in stato di bassa potenza, il driver del protocollo non può inviare richieste OID. Questo requisito è una restrizione aggiuntiva di risparmio energia aggiunta alle altre restrizioni che si applicano quando lo stack di driver si trova nello stato Sospeso.
Se l'adattatore miniport sottostante non è in grado di gestire la potenza, il driver miniport imposta il membro powerManagementCapabilities di NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES su NULL e NDIS imposta il membro PowerManagementCapabilities di NDIS_BIND_PARAMETERS su NULL.
Nota A partire da NDIS 6.30, dopo la notifica di questo evento, il driver del protocollo deve interrompere la generazione di nuove richieste di I/O e non deve attendere il completamento di richieste di I/O in sospeso nel contesto della chiamata a ProtocolNetPnPEvent.
Per altre informazioni sugli eventi di alimentazione impostata, vedere Gestione degli eventi PnP e degli eventi di Power Management in un driver intermedio.
NetEventQueryPower
Indica una richiesta di Power query, che esegue una query sul fatto che l'adattatore miniport sottostante possa eseguire una transizione a uno stato di alimentazione specifico. Un driver di protocollo deve sempre avere esito positivo su NetEventQueryPower . Dopo aver stabilito una connessione attiva, un driver del protocollo può chiamare PoRegisterSystemState per registrare uno stato occupato continuo. Purché la registrazione dello stato sia effettiva, il power manager non tenta di mettere il sistema in sospensione. Dopo che la connessione diventa inattiva, il driver del protocollo annulla la registrazione dello stato chiamando PoUnregisterSystemState. Un driver di protocollo non deve mai tentare di impedire al sistema di passare allo stato di sospensione eseguendo un errore di NetEventQueryRemoveDevice. Si noti che netEventQueryPower è sempre seguito da netEventSetPower. NetEventSetPower che imposta lo stato di alimentazione corrente del dispositivo annulla netEventQueryPower.
Nota A partire da NDIS 6.30, dopo la notifica di questo evento, il driver del protocollo non deve attendere il completamento di richieste di I/O in sospeso nel contesto della chiamata a ProtocolNetPnPEvent.
NetEventQueryRemoveDevice
Indica una richiesta Di rimozione di query sul dispositivo, che esegue una query sul fatto che la scheda di interfaccia di rete possa essere rimossa senza interrompere le operazioni. Se un driver di protocollo non può rilasciare un dispositivo (ad esempio, perché il dispositivo è in uso), deve avere esito negativo su NetEventQueryRemoveDevice restituendo NDIS_STATUS_FAILURE.
NetEventCancelRemoveDevice
Indica una richiesta Annulla rimuovi dispositivo, che annulla la rimozione di una scheda di interfaccia di rete sottostante. Il driver del protocollo deve sempre avere esito positivo a questo evento restituendo NDIS_STATUS_SUCCESS.
NetEventReconfigure
Indica che la configurazione è stata modificata per un componente di rete. Ad esempio, se un utente modifica l'indirizzo IP per TCP/IP, NDIS indica questo evento al protocollo TCP/IP con il codice NetEventReconfigure . Il driver del protocollo può, in rari casi, restituire un codice di errore se non è in grado di applicare le modifiche di configurazione indicate e non sono disponibili valori predefiniti. Un tentativo non riuscito di allocare memoria è un esempio di caso in cui il protocollo restituisce un codice di errore. La restituzione di un codice di errore può comportare la richiesta all'utente di riavviare il sistema.
Un protocollo deve convalidare i dati correlati a NetEventReconfigure passati alla funzione ProtocolNetPnPEvent . Per altre informazioni su tali dati, vedere NET_PNP_EVENT per i driver di protocollo.
NetEventBindList
Indica a un driver di protocollo che è stato riconfigurato l'ordine di elaborazione dell'elenco di associazione. Questo elenco indica un ordine relativo da applicare alle associazioni del protocollo durante l'elaborazione, ad esempio una richiesta utente che potrebbe essere indirizzata a una di diverse associazioni. Il buffer passato con questo evento contiene un elenco di nomi di dispositivi formattati come stringhe Unicode con terminazione NULL. Il formato di ogni nome del dispositivo è identico al parametro DeviceName passato a una chiamata a ProtocolBindAdapterEx.
Un protocollo deve convalidare i dati correlati a NetEventBindList passati alla relativa funzione ProtocolNetPnPEvent . Per altre informazioni su tali dati, vedere NET_PNP_EVENT per i driver di protocollo.
Un protocollo deve convalidare i dati correlati a NetEventBindList passati alla relativa funzione ProtocolNetPnPEvent . Per altre informazioni su tali dati, vedere NET_PNP_EVENT per i driver di protocollo.
NetEventBindsComplete
Indica che un driver di protocollo è associato a tutte le schede di interfaccia di rete a cui può eseguire l'associazione. NDIS non indicherà più associazioni al driver del protocollo, a meno che, ad esempio, una scheda di interfaccia di rete PnP sia collegata al sistema.
NetEventPnPCapabilities
Indica che l'utente è abilitato o disabilitato le funzionalità di riattivazione dell'adattatore sottostante. Il parametro ProtocolBindingContext passato a ProtocolNetPnPEvent specifica l'associazione .
NetEventPause
Indica che l'associazione del protocollo specificata deve immettere lo statoPausing. L'associazione immetterà lo stato sospeso dopo che NDIS ha completato tutte le richieste di invio in sospeso per l'associazione. Per altre informazioni sulla sospensione di un'associazione, vedere Sospensione di un'associazione.
NetEventRestart
Indica che l'associazione del protocollo specificata ha immesso lo stato Di riavvio. Dopo che il driver del protocollo è pronto per riprendere le operazioni di invio e ricezione per l'associazione, l'associazione entra nello stato In esecuzione. Per altre informazioni sul riavvio di un'associazione, vedere Riavvio di un'associazione.
NetEventPortActivation
Indica l'attivazione di un elenco di porte associate all'associazione specificata. Per altre informazioni sulla sospensione di un'associazione, vedere Gestione dell'evento PnP dell'attivazione della porta.
NetEventPortDeactivation
Indica la disattivazione di un elenco di porte associate all'associazione specificata. Per altre informazioni sulla sospensione di un'associazione, vedere Gestione dell'evento PnP di disattivazione della porta.
NetEventIMReEnableDevice
Indica che la configurazione è stata modificata per un miniport virtuale di un driver intermedio NDIS 6.0 o versione successiva. NetEventIMReEnableDevice è simile all'evento NetEventReconfigure , ad eccezione del fatto che il driver intermedio riceve questo evento per un singolo miniport virtuale e l'evento NetEventReconfigure si applica a tutti i miniport virtuali del driver intermedio. Ad esempio, un driver intermedio riceve l'evento NetEventIMReEnableDevice quando un utente disabilita e quindi abilita un singolo miniport virtuale dalla Gestione dispositivi o da un'altra origine. Per esempi di risparmio energia del driver intermedio, vedere l'esempio di driver intermedio MUX MUX NDIS e Notify Object driver disponibile nel repository di esempi di driver Windows in GitHub.
Il membro buffer della struttura NET_PNP_EVENT punta a un buffer che contiene informazioni specifiche dell'evento indicato.
Un driver di protocollo può completare la chiamata a ProtocolNetPnPEvent in modo asincrono con NdisCompleteNetPnPEvent.