Condividi tramite


Attivazione di una porta NDIS

Dopo che un driver miniport alloca correttamente una porta NDIS e prima di usare il numero di porta nelle funzioni NDIS, il driver deve attivare la porta. Per attivare la porta, il driver miniport invia un evento di attivazione della porta Plug and Play (PnP) a NDIS. Per inviare l'evento PnP di attivazione della porta, i driver miniport usano il codice evento NetEventPortActivation PnP nella chiamata alla funzione NdisMNetPnPEvent .

Per attivare le porte, il driver miniport deve impostare i membri della struttura NET_PNP_EVENT_NOTIFICATION a cui punta il parametro NetPnPEvent di NdisMNetPnPEvent come indicato di seguito:

Portnumber
Porta di origine della notifica degli eventi. Impostare questo membro su zero perché i numeri di porta vengono forniti nel membro Buffer della struttura specificata dal membro NetPnPEvent .

NetPnPEvent
Struttura NET_PNP_EVENT che descrive l'evento di attivazione della porta. Impostare i membri di questa struttura come segue:

NetEvent
Codice evento che descrive l'evento. Impostare questo membro su NetEventPortActivation.

Buffer
Puntatore a un elenco collegato di strutture NDIS_PORT . Il membro Successivo delle strutture NDIS_PORT punta alla struttura NDIS_PORT successiva nell'elenco.

BufferLength
Numero di byte specificati in Buffer . Impostare BufferLength sulle dimensioni delle strutture NDIS_PORT.

Altri membri
Impostare i membri rimanenti di NET_PNP_EVENT su NULL.

Il driver miniport elenca le porte che hanno modificato gli stati da inattivi a attivi in un elenco collegato di strutture NDIS_PORT . Tuttavia, se la porta predefinita di un adattatore miniport è la destinazione di un evento NetEventPortActivation PnP, la porta predefinita deve essere l'unica porta nell'elenco.

Quando il driver miniport invia una notifica all'NDIS dell'attivazione di una porta (ed eventualmente prima che venga restituita questa chiamata di notifica), il driver miniport deve essere pronto per gestire le richieste di invio e le richieste OID associate alla porta. I driver Miniport non devono usare il numero di porta di una porta appena attivata nello stato o ricevere indicazioni fino a quando la chiamata a NdisMNetPnPEvent restituisce .

NDIS non invia una notifica ai driver eccessivamente sulle porte attivate fino a quando la porta predefinita non è attiva. Quando NDIS chiama la funzione ProtocolBindAdapterEx di un driver di protocollo, NDIS fornisce un elenco di tutte le porte attualmente attive nel membro ActivePorts della struttura NDIS_BIND_PARAMETERS a cui punta il parametro BindParameters . Quando un driver miniport attiva nuove porte, NDIS invia una notifica a tutti i driver di protocollo associati al driver miniport con l'evento PnP NetEventPortActivation . Per altre informazioni sulla gestione di questi eventi di attivazione delle porte in un driver di protocollo, vedere Gestione dell'evento PnP di attivazione della porta.

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, NDIS non avvia l'associazione tra l'adattatore miniport e i driver overlying finché il driver miniport non attiva la porta predefinita con l'evento PnP di attivazione della porta.

Tutte le porte specificate dall'elenco collegato di strutture NDIS_PORT devono trovarsi nello stato allocato. Un driver miniport non deve tentare di attivare una porta già attiva; se il driver tenta di attivare una porta attiva, NDIS considera la situazione come un errore di attivazione della porta.

Se NDIS non riesce ad attivare porte nell'elenco, la chiamata a NdisMNetPnPEvent non riesce e nessuna delle porte nell'elenco cambia stato nello stato attivato. Se NDIS non riesce ad attivare le porte perché alcune delle porte non esistono, NdisMNetPnPEvent restituisce un valore restituito NDIS_STATUS_INVALID_PORT. Se NDIS non riesce ad attivare le porte perché alcune delle porte non sono nello stato allocato, NdisMNetPnPEvent restituisce un valore restituito NDIS_STATUS_INVALID_PORT_STATE.

Dopo l'attivazione di una porta, la porta si trova nello stato attivato. I driver Miniport possono indicare i dati e lo stato ricevuti per una porta nello stato attivato.

NDIS passa lo stato di autenticazione della porta predefinita alla funzione MiniportInitializeEx nel membro DefaultPortAuthStates della struttura NDIS_MINIPORT_INIT_PARAMETERS . Se un driver miniport controlla la porta predefinita, quando il driver miniport attiva la porta predefinita, può attivare la porta predefinita usando le impostazioni di autenticazione predefinite. Per usare le impostazioni di autenticazione predefinite, impostare il flag NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS nel membro Flags della struttura NDIS_PORT_CHARACTERISTICS . I driver Miniport possono usare il flag NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS per le porte allocate e attivate. Per il caso di attivazione, NDIS assegna gli stati di autenticazione predefiniti alla porta appena attivata e ignora gli stati di autenticazione passati a NdisMNetPnPEvent per l'evento NetEventPortActivation .

Per altre informazioni sul controllo della porta predefinita e dell'allocazione delle porte, vedere Allocazione delle porte NDIS.