Udostępnij przez


Wysyłanie danych sieciowych

Na poniższej ilustracji przedstawiono podstawową operację wysyłania, która obejmuje sterownik protokołu, NDIS i sterownik miniportu.

Diagram przedstawiający podstawową operację wysyłania NDIS ze sterownikiem protokołu, NDIS i sterownikiem miniportu.

Sterowniki protokołów nazywają funkcję NdisSendNetBufferLists w celu wysyłania struktur NET_BUFFER_LIST w powiązaniu. NDIS wywołuje funkcję MiniportSendNetBufferLists, aby przekazać struktury NET_BUFFER_LIST do podstawowego sterownika miniportu.

Wszystkie operacje wysyłania oparte na NET_BUFFER są asynchroniczne. Sterownik miniportu wywołuje funkcję NdisMSendNetBufferListsComplete z odpowiednim kodem stanu po zakończeniu. Wysyłanie każdej struktury NET_BUFFER_LIST można wykonać indywidualnie. NDIS wywołuje funkcję ProtocolSendNetBufferListsComplete sterownika protokołu za każdym razem, gdy sterownik miniportu wywołuje NdisMSendNetBufferListsComplete.

Sterowniki protokołów mogą odzyskać własność struktur NET_BUFFER_LIST i wszystkich skojarzonych struktur i danych, gdy tylko usługa NDIS wywołuje funkcję ProtocolSendNetBufferListsComplete sterownika protokołu.

Sterownik miniportu lub NDIS może zwracać struktury NET_BUFFER_LIST w dowolnej kolejności. Sterowniki protokołów mają gwarancję, że lista struktur NET_BUFFER dołączonych do każdej struktury NET_BUFFER_LIST nie została zmodyfikowana.

Każdy sterownik NDIS może oddzielić struktury NET_BUFFER w strukturze NET_BUFFER_LIST. Każdy sterownik NDIS może również oddzielić MDLs w strukturze NET_BUFFER. Jednak sterownik musi zawsze zwracać struktury NET_BUFFER_LIST ze strukturami NET_BUFFER i MDL w oryginalnej formie. Na przykład sterownik pośredni może rozdzielić NET_BUFFER_LIST na dwie nowe struktury NET_BUFFER_LIST i przekazać część oryginalnych danych do następnego sterownika. Jednak gdy sterownik pośredni zakończy przetwarzanie oryginalnego NET_BUFFER_LIST, musi zwrócić kompletny NET_BUFFER_LIST z oryginalnymi strukturami NET_BUFFER i MDL.

Sterowniki protokołu ustawiają element SourceHandle w strukturze NET_BUFFER_LIST na NdisBindingHandle, który NDIS podał podczas wywołania funkcji NdisOpenAdapterEx. Usługa NDIS używa członka SourceHandle, aby zwrócić struktury NET_BUFFER_LIST do sterownika protokołu, który wysłał te struktury NET_BUFFER_LIST.

Sterowniki pośrednie ustawiają również element członkowski SourceHandle w strukturze NET_BUFFER_LIST na wartość NdisBindingHandle podaną w wywołaniu NdisOpenAdapterEx. Jeśli sterownik pośredni przekazuje żądanie wysyłania, sterownik musi zapisać wartość SourceHandle podaną przez sterownik nadrzędny przed zapisem do członka SourceHandle. Gdy usługa NDIS zwraca strukturę NET_BUFFER_LIST przekazywaną do sterownika pośredniego, sterownik pośredni musi przywrócić SourceHandle, który zapisał.