NDIS_PD_POST_AND_DRAIN_BUFFER_LIST fungsi panggilan balik (ndis.h)

Platform PacketDirect (PD) memanggil fungsi PDPostAndDrainBufferList driver miniport berkemampuan PD untuk memposting struktur PD_BUFFER ke PD mengirimkan/menerima antrean dan menguras struktur PD_BUFFER yang telah diposting sebelumnya yang telah selesai.

Catatan Anda harus mendeklarasikan fungsi dengan menggunakan jenis NDIS_PD_POST_AND_DRAIN_BUFFER_LIST . Untuk informasi selengkapnya, lihat bagian Contoh berikut ini.

 

Sintaks

NDIS_PD_POST_AND_DRAIN_BUFFER_LIST NdisPdPostAndDrainBufferList;

VOID() NdisPdPostAndDrainBufferList(
  [in, out] NDIS_PD_QUEUE *Queue,
  [in, out] PD_BUFFER **PostBufferListHead,
  [in, out] PD_BUFFER ***DrainBufferListTail,
  [in]      ULONG MaxDrainCount
)
{...}

Parameter

[in, out] Queue

Penunjuk ke antrean transmisi atau terima yang akan menerima buffer yang diposting dan akan menghapus buffer yang telah selesai.

[in, out] PostBufferListHead

Kepala daftar pos. Penyedia menghapus buffer dalam daftar ini dan menambahkannya ke dalam Antrean.

[in, out] DrainBufferListTail

Ekor daftar pengurasan. Penyedia menghapus buffer yang telah selesai dari Antrean dan menambahkannya ke daftar ini.

[in] MaxDrainCount

Jumlah maksimum struktur PD_BUFFER untuk dikosongkan. Penyedia harus memastikan tidak melebihi jumlah ini. Satu set struktur PD_BUFFER parsial yang membentuk satu jumlah paket L2 adalah 1.

Nilai kembali

Fungsi panggilan balik ini tidak mengembalikan nilai.

Keterangan

Penyedia menghapus buffer dari PostBufferList dan menempatkannya ke dalam antrean, dimulai dengan buffer kepala dalam daftar dan maju ke buffer berikutnya sampai PostBufferList kosong atau antrean penuh (atau mendekati penuh). Penyedia maju ke PostListHead dan mengembalikan kepala daftar baru ke pemanggil. Penyedia juga menghapus buffer yang telah selesai dari antrean dan memasukkannya ke dalam ekor DrainBufferList dan mengembalikan ekor DrainBufferList baru ke klien.

Catatan Penyedia harus menguras buffer sebanyak mungkin untuk membuka ruang bagi buffer yang sedang diposting. PostBufferList dan DrainBufferList dijamin sebagai daftar buffer terputus-putus (Klien tidak pernah menyediakan kepala daftar buffer sebagai PostBufferListHead dan ekor daftar yang sama dengan DrainBufferListTail).
 
Klien juga dapat meneruskan daftar buffer posting kosong untuk hanya mengosongkan buffer yang selesai tanpa memposting buffer baru. Klien juga dapat mengatur MaxDrainCount ke 0 untuk hanya memposting buffer baru tanpa menguras buffer yang telah selesai. Dalam kasus yang jarang terjadi, klien dapat memanggil panggilan dengan daftar buffer pos kosong dan MaxDrainCount ke 0. Penyedia tidak boleh mengasumsikan sebaliknya dan menangani panggilan seperti itu dengan benar seperti tanpa operasi.

Contoh

Untuk menentukan fungsi PDPostAndDrainBufferList , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi untuk pengandar. Mendeklarasikan fungsi menggunakan jenis fungsi membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan fungsi PDPostAndDrainBufferList yang diberi nama "MyPDPostAndDrainBufferList", gunakan jenis NDIS_PD_POST_AND_DRAIN_BUFFER_LIST seperti yang ditunjukkan dalam contoh kode ini:

NDIS_PD_POST_AND_DRAIN_BUFFER_LIST MyPDPostAndDrainBufferList;

Kemudian, terapkan fungsi Anda sebagai berikut:

_Use_decl_annotations_
VOID
 MyPDPostAndDrainBufferList(
    NDIS_PD_QUEUE*  Queue,
    PD_BUFFER**  PostBufferListHead,
    PD_BUFFER*** DrainBufferListTail,
    ULONG  MaxDrainCount
    )
  {...}

Jenis fungsi NDIS_PD_POST_AND_DRAIN_BUFFER_LIST ditentukan dalam file header Ntddndis.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi NDIS_PD_POST_AND_DRAIN_BUFFER_LIST dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver NDIS.

Untuk informasi tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.

Berikut ini adalah contoh cuplikan kode yang menggambarkan tidak langsung penunjuk untuk fungsi ini.

PD_BUFFER* PostHead = NULL;
PD_BUFFER** PostTail = &PostHead;
PD_BUFFER* DrainHead = NULL;
PD_BUFFER** DrainTail = &DrainHead;

PD_BUFFER* bufX = <allocated PD_BUFFER>;

bufX->NextPDBuffer = NULL;
*PostTail = bufX;
PostTail = &bufX->NextPDBuffer;

// BEFORE:
//PostHead == bufX
//PostTail == &bufZ->NextPDBuffer
//DrainHead == NULL
//DrainTail == &DrainHead

NDIS_PD_POST_AND_DRAIN_BUFFER_LIST(
          Queue,
          &PostHead,
          &DrainTail,
          32);

// AFTER:
//PostHead == bufY
//PostTail == &bufZ->NextPDBuffer
//DrainHead == buf1
//DrainTail == &buf5->NextPDBuffer

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10
Server minimum yang didukung Server Windows 2016
Target Platform Windows
Header ndis.h
IRQL <= DISPATCH_LEVEL