MINIPORT_SEND_NET_BUFFER_LISTS funzione di callback (ndis.h)
NDIS chiama la funzione MiniportSendNetBufferLists per trasmettere i dati di rete contenuti in un elenco collegato di strutture NET_BUFFER_LIST .
Sintassi
MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;
void MiniportSendNetBufferLists(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] PNET_BUFFER_LIST NetBufferList,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG SendFlags
)
{...}
Parametri
[in] MiniportAdapterContext
Handle per un'area di contesto allocata dal driver miniport nella funzione MiniportInitializeEx . Il driver miniport usa questa area di contesto per mantenere le informazioni sullo stato di un adattatore.
[in] NetBufferList
Puntatore alla prima struttura NET_BUFFER_LIST in un elenco collegato di strutture NET_BUFFER_LIST. Ogni struttura NET_BUFFER_LIST nell'elenco descrive un elenco di strutture NET_BUFFER . Ogni struttura di NET_BUFFER nell'elenco è mappata a una catena di elenchi di certificati. Gli ELENCHI di dati di rete contengono i dati di rete.
[in] PortNumber
Numero di porta che identifica una porta dell'adattatore miniport. Per assegnare un numero di porta dell'adattatore miniport, chiamare la funzione NdisMAllocatePort . Un valore zero identifica la porta predefinita di un adattatore miniport.
[in] SendFlags
Flag che definiscono gli attributi per l'operazione di invio. I flag possono essere combinati con un'operazione OR. Per cancellare tutti i flag, impostare questo membro su zero. Questa funzione supporta i flag seguenti:
NDIS_SEND_FLAGS_DISPATCH_LEVEL
Specifica che il runtime di integrazione corrente è DISPATCH_LEVEL. Per altre informazioni su questo flag, vedere Dispatch IRQL Tracking.For more information about this flag, see Dispatch IRQL Tracking.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
Specifica che NDIS deve verificare la presenza di loopback. Per impostazione predefinita, NDIS non esegue il ciclo dei dati al driver che ha inviato la richiesta di invio. Un driver eccessivamente in grado di eseguire l'override di questo comportamento impostando questo flag. Quando questo flag è impostato, NDIS identifica tutte le strutture NET_BUFFER che contengono dati che corrispondono ai criteri di ricezione per l'associazione. NDIS indica NET_BUFFER strutture che corrispondono ai criteri al driver overlying. Questo flag non influisce sul controllo del loopback o del loopback su altre associazioni.
Valore restituito
nessuno
Osservazioni
MiniportSendNetBufferLists è una funzione obbligatoria per i driver miniport. Quando un driver overlying chiama la funzione NdisSendNetBufferLists , NDIS chiama la funzione MiniportSendNetBufferLists del driver miniport associato.
Quando si trasmettono i dati di rete passati da NDIS al parametro NetBufferLists , il driver miniport deve usare le linee guida seguenti:
- È necessario mantenere l'ordine delle strutture NET_BUFFER in ogni struttura NET_BUFFER_LIST .
- L'ordine delle strutture NET_BUFFER_LIST deve essere mantenuto se devono essere trasmesse sulla stessa connessione.
-
Se le strutture NET_BUFFER_LIST devono essere trasmesse su connessioni diverse, possono essere suddivise in più code di trasmissione se sono in uso le funzionalità seguenti. In questo caso, è necessario mantenere l'ordine delle strutture NET_BUFFER_LIST per ogni connessione.
- Receive side scaling (RSS) (Il valore hash RSS nella struttura NET_BUFFER_LIST può essere usato come indice nella tabella di riferimento indiretto RSS).
- Virtual Machine Queue (VMQ) (L'identificatore della coda in uscita è impostato nelle informazioni OOB netBufferListFilteringInfo ). Per altre informazioni, vedere Percorso di trasmissione VMQ.
- IEEE 802.1 Data Center Bridging (DCB) (È possibile disattivare la classe di traffico ).)
- IEEE 802.1p (è possibile disattivare i tag 802.1p senza DCB).
I driver Miniport accettano tutte le richieste inviate da NDIS chiamando la funzione MiniportSendNetBufferLists . Se un driver miniport non può completare immediatamente una richiesta di invio, il driver deve contenere la richiesta in una coda fino a quando non può completare la richiesta. Mentre una richiesta di invio è in sospeso, il driver miniport mantiene la proprietà delle strutture NET_BUFFER_LIST e tutte le risorse allocate dal protocollo associate alle strutture NET_BUFFER_LIST.
Il conducente miniport deve chiamare il Funzione NdisMSendNetBufferListsComplete per completare le richieste di invio per tutte le strutture NET_BUFFER_LIST. Per migliorare le prestazioni del sistema, il driver può creare un elenco collegato contenente le strutture NET_BUFFER_LIST da più richieste di invio. Il driver può quindi passare tale elenco collegato in una singola chiamata a NdisMSendNetBufferListsComplete.NET_BUFFER_LIST strutture e altre risorse associate devono essere considerate inaccessibili dal driver miniport non appena il driver chiama NdisMSendNetBufferListsComplete.
La funzione MiniportSendNetBufferLists deve sincronizzare l'accesso alle code interne dei dati di rete con le altre funzioni MiniportXxx del driver che accedono alle stesse code. Un driver miniport può usare blocchi di rotazione per sincronizzare l'accesso alle code.
I driver di protocollo sono responsabili della determinazione dei dati di rete necessari, in base al tipo medio selezionato dal driver miniport associato. Tuttavia, un driver di protocollo può fornire dati di rete che specificano pacchetti più brevi rispetto alle dimensioni minime dei pacchetti per il supporto selezionato. In questo caso , MiniportSendNetBufferLists deve riempire i pacchetti con zeri se il supporto selezionato impone un requisito di lunghezza minima per le dimensioni del pacchetto di trasmissione.
Se il driver miniport imposta il flag NDIS_MAC_OPTION_NO_LOOPBACK quando NDIS esegue una query sul OID_GEN_MAC_OPTIONS OID, il driver miniport non deve tentare di eseguire il loopback dei dati di rete. NDIS fornisce il supporto del loopback software per un driver di questo tipo.
NDIS chiama MiniportSendNetBufferLists in IRQL<= DISPATCH_LEVEL.
Esempi
Per definire una funzione MiniportSendNetBufferLists , è necessario innanzitutto fornire una dichiarazione di funzione che identifica il tipo di funzione che si sta definendo. Windows fornisce un set di tipi di funzione per i driver. La dichiarazione di una funzione con i tipi di funzione consente di eseguire l'analisi del codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica rilevano gli errori ed è un requisito per la scrittura dei driver per il sistema operativo Windows.Ad esempio, per definire una funzione MiniportSendNetBufferLists denominata "MySendNetBufferLists", usare il tipo di MINIPORT_SEND_NET_BUFFER_LISTS come illustrato nell'esempio di codice seguente:
MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;
Implementare quindi la funzione come segue:
_Use_decl_annotations_
VOID
MySendNetBufferLists(
NDIS_HANDLE MiniportAdapterContext,
PNET_BUFFER_LIST NetBufferList,
NDIS_PORT_NUMBER PortNumber,
ULONG SendFlags
)
{...}
Il tipo di funzione MINIPORT_SEND_NET_BUFFER_LISTS è definito nel file di intestazione Ndis.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano utilizzate le annotazioni applicate al tipo di funzione MINIPORT_SEND_NET_BUFFER_LISTS nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver NDIS.
Per informazioni sulle Use_decl_annotations, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Supportato in NDIS 6.0 e versioni successive. |
Piattaforma di destinazione | Windows |
Intestazione | ndis.h (include Ndis.h) |
IRQL | <= DISPATCH_LEVEL |
Regole di conformità DDI | NdisTimedDataHang, NdisTimedDataSend |