Sdílet prostřednictvím


Odesílání síťových dat

Následující obrázek znázorňuje základní operaci odesílání, která zahrnuje ovladač protokolu, rozhraní NDIS a ovladač miniportu.

Diagram znázorňující základní operaci odesílání NDIS s ovladačem protokolu, NDIS a miniportovým ovladačem

Ovladače protokolu volají funkci NdisSendNetBufferLists pro odesílání NET_BUFFER_LIST struktur vazby. NDIS volá funkci MiniportSendNetBufferLists ovladače miniportu , která předá struktury NET_BUFFER_LIST podkladovému ovladači miniportu.

Všechny operace odesílání založené na NET_BUFFER jsou asynchronní. Ovladač miniportu volá funkci NdisMSendNetBufferListsComplete s odpovídajícím stavovým kódem po dokončení. Odesílání každé NET_BUFFER_LIST struktury lze dokončit jednotlivě. NDIS volá funkci ProtocolSendNetBufferListsComplete ovladače protokolu pokaždé, když ovladač miniportu volá NdisMSendNetBufferListsComplete.

Ovladače protokolu můžou uvolnit vlastnictví struktury NET_BUFFER_LIST a všech přidružených struktur a dat, jakmile NDIS volá funkci ProtocolSendNetBufferListsComplete ovladače protokolu.

Ovladač miniportu nebo NDIS může vrátit struktury NET_BUFFER_LIST v libovolném pořadí. Ovladače protokolu jsou zaručeny, že seznam NET_BUFFER struktur připojených ke každé NET_BUFFER_LIST struktury nebyl změněn.

Každý ovladač NDIS může oddělit struktury NET_BUFFER ve struktuře NET_BUFFER_LIST. Každý ovladač NDIS může také oddělit MDL ve struktuře NET_BUFFER. Ovladač však musí vždy vracet struktury NET_BUFFER_LIST společně se strukturami NET_BUFFER a MDL ve své původní podobě. Dočasný ovladač může například oddělit NET_BUFFER_LIST do dvou nových NET_BUFFER_LIST struktur a předat část původních dat dalšímu ovladači. Pokud však zprostředkující ovladač dokončí zpracování původního NET_BUFFER_LIST, musí vrátit kompletní NET_BUFFER_LIST s původními strukturami NET_BUFFER a seznamy MDL.

Ovladače protokolu nastavují člen SourceHandle ve struktuře NET_BUFFER_LIST na NdisBindingHandle, který NDIS poskytl při volání funkce NdisOpenAdapterEx. NDIS používá SourceHandle k vrácení struktur NET_BUFFER_LIST do ovladače protokolu, který odeslal struktury NET_BUFFER_LIST.

Mezilehlé ovladače také nastavují člen SourceHandle ve struktuře NET_BUFFER_LIST na hodnotu NdisBindingHandle, kterou NDIS poskytuje při volání NdisOpenAdapterEx. Pokud zprostředkující ovladač předá žádost o odeslání, musí ovladač uložit hodnotu SourceHandle, kterou poskytl nadřazený ovladač před zápisem do člena SourceHandle. Když NDIS vrátí předanou NET_BUFFER_LIST strukturu přechodnému ovladači, zprostředkující ovladač musí obnovit SourceHandle, který uložil.