Bagikan melalui


Menerima Data Jaringan

Gambar berikut mengilustrasikan operasi penerimaan dasar, yang melibatkan driver miniport, NDIS, dan driver protokol.

Diagram yang mengilustrasikan operasi penerimaan jaringan dasar.

Driver miniport memanggil fungsi NdisMIndicateReceiveNetBufferLists untuk menunjukkan struktur NET_BUFFER ke driver tingkat yang lebih tinggi. Setiap struktur NET_BUFFER biasanya harus dilampirkan ke struktur NET_BUFFER_LIST terpisah. Ini memungkinkan driver protokol untuk membuat subset dari daftar asli struktur NET_BUFFER_LIST dan meneruskannya ke klien yang berbeda. Beberapa driver, misalnya driver miniport IEEE 802.11 asli, mungkin melampirkan lebih dari satu struktur NET_BUFFER ke struktur NET_BUFFER_LIST.

Setelah menautkan semua struktur NET_BUFFER_LIST, driver miniport meneruskan penunjuk ke struktur NET_BUFFER_LIST pertama dalam daftar ke fungsi NdisMIndicateReceiveNetBufferLists . NDIS memeriksa struktur NET_BUFFER_LIST dan memanggil fungsi ProtocolReceiveNetBufferLists dari setiap driver protokol yang terkait dengan struktur NET_BUFFER_LIST. NDIS meneruskan subset daftar yang hanya menyertakan struktur NET_BUFFER_LIST yang terkait dengan pengikatan yang benar ke setiap driver protokol. NDIS cocok dengan nilai NetBufferListFrameType yang ditentukan dalam struktur NET_BUFFER_LIST dengan jenis bingkai yang didaftarkan setiap driver protokol.

Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES dalam parameter ReceiveFlags yang diteruskan ke fungsi ProtocolReceiveNetBufferLists driver protokol diatur, NDIS mendapatkan kembali kepemilikan struktur NET_BUFFER_LIST segera setelah panggilan ProtocolReceiveNetBufferLists kembali.

Catatan Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES diatur, driver protokol harus mempertahankan set asli struktur NET_BUFFER_LIST dalam daftar yang ditautkan. Misalnya, ketika bendera ini diatur, driver mungkin memproses struktur dan menunjukkannya naik tumpukan satu per satu tetapi sebelum fungsi mengembalikannya harus memulihkan daftar asli yang ditautkan.

Jika bendera NDIS_RECEIVE_FLAGS_RESOURCES dalam parameter ReceiveFlags yang diteruskan ke fungsi ProtocolReceiveNetBufferLists driver protokol tidak diatur, driver protokol dapat mempertahankan kepemilikan struktur NET_BUFFER_LIST. Dalam hal ini, driver protokol harus mengembalikan struktur NET_BUFFER_LIST dengan memanggil fungsi NdisReturnNetBufferLists .

Jika driver miniport hampir kehabisan sumber daya penerima, driver dapat mengatur bendera NDIS_RECEIVE_FLAGS_RESOURCES di parameter ReceiveFlags dalam panggilan ke NdisMIndicateReceiveNetBufferLists. Dalam hal ini, driver dapat merebut kembali kepemilikan semua struktur NET_BUFFER_LIST yang ditunjukkan dan struktur NET_BUFFER yang disematkan segera setelah NdisMIndicateReceiveNetBufferLists kembali. Menunjukkan struktur NET_BUFFER dengan set bendera NDIS_RECEIVE_FLAGS_RESOURCES memaksa driver protokol untuk menyalin data dan oleh karena itu harus dihindari. Driver miniport harus mendeteksi kapan akan kehabisan sumber daya terima dan mengambil langkah apa pun yang diperlukan untuk menghindari situasi ini.

NDIS memanggil fungsi MiniportReturnNetBufferLists driver miniport setelah driver protokol memanggil NdisReturnNetBufferLists.

Catatan Jika driver miniport menunjukkan struktur NET_BUFFER_LIST dengan bendera NDIS_RECEIVE_FLAGS_RESOURCES yang ditetapkan, itu tidak berarti bahwa NDIS akan menunjukkan struktur NET_BUFFER_LIST ke driver protokol dengan status yang sama. Misalnya, NDIS dapat menyalin struktur NET_BUFFER_LIST dengan bendera NDIS_RECEIVE_FLAGS_RESOURCES diatur dan menunjukkan salinan ke driver protokol dengan bendera dihapus.

NDIS dapat mengembalikan struktur NET_BUFFER_LIST ke driver miniport dalam urutan arbitrer dan dalam kombinasi apa pun. Artinya, daftar tertaut struktur NET_BUFFER_LIST yang dikembalikan ke driver miniport dengan panggilan ke fungsi MiniportReturnNetBufferLists , dapat memiliki struktur NET_BUFFER_LIST dari panggilan sebelumnya yang berbeda ke NdisMIndicateReceiveNetBufferLists.

Driver miniport harus mengatur anggota SourceHandle dalam struktur NET_BUFFER_LIST ke MiniportAdapterHandle yang disediakan NDIS ke driver miniport dalam fungsi MiniportInitializeEx . Driver filter harus mengatur anggota SourceHandle dari setiap struktur NET_BUFFER_LIST bahwa driver filter berasal dari NdisFilterHandle filter yang disediakan NDIS ke driver filter dalam fungsi FilterAttach . Driver filter tidak boleh mengubah anggota SourceHandle dalam struktur NET_BUFFER_LIST apa pun yang tidak berasal dari driver filter.

Driver perantara juga menetapkan anggota SourceHandle dalam struktur NET_BUFFER_LIST ke nilai MiniportAdapterHandle yang diberikan NDIS kepada driver perantara dalam fungsi MiniportInitializeEx . Jika driver perantara meneruskan indikasi terima, driver harus menyimpan nilai SourceHandle yang disediakan driver yang mendasar sebelum menulis ke anggota SourceHandle . Ketika NDIS mengembalikan struktur NET_BUFFER_LIST yang diteruskan ke driver perantara, driver perantara harus memulihkan SourceHandle yang disimpannya.