Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per disattivare le porte NDIS, un driver miniport invia a NDIS un evento di disattivazione porta Plug and Play (PnP). Dopo che un driver miniport ha attivato correttamente una porta, il driver deve disattivare la porta prima di liberare la porta. Inoltre, il driver potrebbe disattivare una porta per motivi specifici dell'applicazione. Una porta può essere riattivata dopo la disattivazione, ma non è possibile riattivare una porta se viene liberata.
Per inviare un evento PnP di disattivazione delle porte, i driver miniport usano il codice evento PnP NetEventPortDeactivation durante la chiamata alla funzione NdisMNetPnPEvent. Per disattivare le porte, il driver miniport deve impostare i membri della struttura NET_PNP_EVENT_NOTIFICATION a cui il parametro NetPnPEvent di NdisMNetPnPEvent punta nel seguente modo:
NumeroPorta
Porta di origine della notifica dell'evento. Impostare questo membro su zero, perché i numeri di porta vengono forniti nel Buffer membro della struttura specificata dal membro NetPnPEvent.
NetPnPEvent
Struttura NET_PNP_EVENT che descrive l'evento di disattivazione della porta. Impostare i membri di questa struttura come segue:
NetEvent
Codice evento che descrive l'evento. Impostare questo membro su NetEventPortDeactivation.
buffer
Un puntatore a un array di elementi di tipo NDIS_PORT_NUMBER. La matrice contiene i numeri di porta di tutte le porte che il driver miniport sta disattivando.
LunghezzaBuffer
Numero di byte specificati in Buffer . Impostare BufferLength alla dimensione dell'array a cui punta Buffer. Per ottenere il numero di elementi nella matrice, dividere il valore in BufferLength in base alle dimensioni del tipo di dati NDIS_PORT_NUMBER.
Altri membri
Impostare i membri rimanenti di NET_PNP_EVENT su NULL.
Un driver miniport può fornire una matrice con un elenco di porte da disattivare. Tuttavia, se la porta predefinita di un adattatore miniport è l'obiettivo di un evento NetEventPortDeactivation PnP, la porta predefinita deve essere l'unica porta specificata nell'array.
I driver Miniport possono disattivare le porte attive in qualsiasi momento. Tuttavia, prima che un driver miniport disattivi una porta, deve assicurarsi che non ci siano indicazioni di stato in sospeso o indicazioni di ricezione associate a tale porta. Dopo che il driver miniport invia l'evento PnP di disattivazione della porta, non deve avviare alcuna segnalazione di stato né ricevere indicazioni associate alle porte disattivate.
Un driver miniport può anche riattivare una porta. Per altre informazioni sull'attivazione delle porte NDIS, vedere Attivazione delle porte NDIS.
Quando un driver miniport disattiva le porte, NDIS invia una notifica a tutti i driver di protocollo associati a quest'ultimo tramite l'evento PnP NetEventPortDeactivation. Questo evento PnP elenca le porte che sono state modificate nello stato allocato e non includono porte già disattivate. Per altre informazioni sulla gestione degli eventi di disattivazione delle porte in un driver di protocollo, vedere Gestione dell'evento PnP di disattivazione delle porte.
Prima che un driver miniport allochi una porta NDIS, il driver deve chiamare la funzione NdisMSetMiniportAttributes per impostare gli attributi di registrazione nella struttura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES. I driver Miniport possono controllare l'attivazione della porta predefinita impostando il flag di attributo NDIS_MINIPORT_CONTROLS_DEFAULT_PORT quando chiamano NdisMSetMiniportAttributes. Se un driver miniport assume la responsabilità di attivare la porta predefinita e il driver miniport ha attivato la porta predefinita, deve disattivare la porta predefinita prima di tornare dalla funzione MiniportHaltEx.
Tutte le porte specificate dalla matrice di elementi NDIS_PORT_NUMBER devono trovarsi nello stato attivato. Un driver miniport non deve tentare di disattivare una porta già disattivata.
Se NDIS non riesce a disattivare le porte nella matrice di porte, nessuna delle porte nella matrice di porte cambierà lo stato. Se la disattivazione ha esito negativo perché alcune delle porte specificate non esistono, la funzioneNdisMNetPnPEventrestituisce il valore restituito NDIS_STATUS_INVALID_PORT. Se la disattivazione ha esito negativo perché alcune delle porte non sono nello stato attivato, NdisMNetPnPEvent restituisce il valore restituito NDIS_STATUS_INVALID_PORT_STATE.
Finché non viene restituita la chiamata a NdisMNetPnPEvent, non viene disattivata una porta e i driver miniport devono essere in grado di gestire le richieste OID e inviare richieste associate a tale porta.
Quando un driver miniport disattiva la porta predefinita, NDIS chiude tutti i collegamenti tra i driver di protocollo superiori e l'adattatore miniport. Se un driver miniport tenta di disattivare la porta predefinita e la porta predefinita è già disattivata, NdisMNetPnPEvent ha esito negativo e restituisce il valore restituito NDIS_STATUS_INVALID_PORT_STATE. Se un driver miniport tenta di disattivare la porta predefinita e la porta predefinita non è l'unica porta specificata nella matrice di elementi NDIS_PORT_NUMBER, NdisMNetPnPEvent ha esito negativo e restituisce il valore restituito NDIS_STATUS_INVALID_PORT. Se un driver miniport imposta il membro Buffer di su NULL o il membro BufferLength su zero, NDIS non riesce a eseguire la chiamata NdisMNetPnPEvent e restituisce il valore di ritorno NDIS_STATUS_INVALID_PARAMETER.
Dopo la disattivazione di una porta, la porta si trova nello stato allocato. I driver Miniport non possono indicare i dati ricevuti o lo stato per la porta nello stato allocato.