Bagikan melalui


Membatalkan Operasi Kirim

Gambar berikut mengilustrasikan pembatalan operasi pengiriman.

Diagram yang memperlihatkan proses pembatalan operasi pengiriman.

Driver memanggil makro NDIS_SET_NET_BUFFER_LIST_CANCEL_ID untuk setiap struktur NET_BUFFER_LIST yang diteruskannya ke driver tingkat bawah untuk transmisi. Fungsi NDIS_SET_NET_BUFFER_LIST_CANCEL_ID menandai paket yang ditentukan dengan pengidentifikasi pembatalan.

Sebelum menetapkan ID pembatalan ke paket, driver harus memanggil NdisGeneratePartialCancelId untuk mendapatkan byte pesanan tinggi dari setiap ID pembatalan yang ditetapkannya. Ini memastikan bahwa driver tidak menduplikasi ID pembatalan yang ditetapkan oleh driver lain dalam sistem. Driver biasanya memanggil NdisGeneratePartialCancelId sekali dari rutinitas DriverEntry ; namun, driver dapat memperoleh lebih dari satu pengidentifikasi pembatalan parsial dengan memanggil NdisGeneratePartialCancelId lebih dari sekali.

Untuk membatalkan transmisi data yang tertunda dalam struktur NET_BUFFER_LIST yang ditandai, driver meneruskan ID pembatalan ke fungsi NdisCancelSendNetBufferLists . Driver dapat memperoleh ID pembatalan struktur NET_BUFFER_LIST dengan memanggil makro NDIS_GET_NET_BUFFER_LIST_CANCEL_ID .

Jika driver menandai semua struktur NET_BUFFER_LIST dengan pengidentifikasi pembatalan yang sama, driver dapat membatalkan semua transmisi yang tertunda dengan satu panggilan ke NdisCancelSendNetBufferLists. Jika driver menandai semua struktur NET_BUFFER_LIST dalam subgrup struktur NET_BUFFER_LIST dengan pengidentifikasi unik, driver dapat membatalkan semua transmisi yang tertunda dalam subgrup tersebut dengan satu panggilan ke NdisCancelSendNetBufferLists.

NDIS memanggil fungsi MiniportCancelSend dari driver tingkat bawah yang sesuai pada pengikatan. Setelah membatalkan transmisi yang tertunda, driver miniport yang mendasar memanggil fungsi NdisMSendNetBufferListsComplete , untuk mengembalikan struktur NET_BUFFER_LIST dan status penyelesaian NDIS_STATUS_SEND_ABORTED. NDIS, pada gilirannya, memanggil fungsi ProtocolSendNetBufferListsComplete driver yang sesuai.

Dalam fungsi ProtocolSendNetBufferListsComplete , driver protokol dapat memanggil NDIS_SET_NET_BUFFER_LIST_CANCEL_ID dengan CancelId diatur ke NULL. Ini mencegah NET_BUFFER_LIST secara tidak sengaja digunakan lagi dengan ID pembatalan kedaluarsa.