Fungsi KeRemoveQueue (ntifs.h)
Rutinitas KeRemoveQueue memberikan alur panggilan penunjuk ke entri yang dihapus antrean dari objek antrean yang diberikan atau memungkinkan pemanggil menunggu, hingga interval batas waktu opsional, pada objek antrean.
Sintaks
PLIST_ENTRY KeRemoveQueue(
[in, out] PRKQUEUE Queue,
[in] KPROCESSOR_MODE WaitMode,
[in, optional] PLARGE_INTEGER Timeout
);
Parameter
[in, out] Queue
Penunjuk ke objek antrean yang diinisialisasi yang pemanggilnya menyediakan penyimpanan residen di kumpulan yang tidak disebarkan.
[in] WaitMode
Mode prosesor tempat pemanggil menunggu, yang dapat berupa KernelMode atau UserMode. Jika ada sesuatu di tumpukannya yang mungkin diakses di IRQL >= DISPATCH_LEVEL, pemanggil harus menentukan KernelMode.
[in, optional] Timeout
Penunjuk ke variabel yang menentukan waktu absolut atau relatif, dalam satuan 100 nanodetik, di mana penantian akan kedaluwarsa. Jika nilai Batas Waktu negatif, waktu kedaluwarsa relatif terhadap waktu sistem saat ini; jika tidak, itu mutlak. Waktu kedaluwarsa absolut melacak perubahan waktu sistem; waktu kedaluwarsa relatif tidak terpengaruh oleh perubahan waktu sistem. Penunjuk ini bisa NULL.
Nilai kembali
KeRemoveQueue mengembalikan salah satu hal berikut ini:
- Penunjuk ke entri yang tidak diantrekan dari objek antrean yang diberikan, jika tersedia.
- STATUS_TIMEOUT, jika interval Batas Waktu yang diberikan kedaluwarsa sebelum entri tersedia
- STATUS_USER_APC, jika APC mode pengguna dikirimkan dalam konteks utas panggilan
- STATUS_ABANDONED, jika antrean telah dijalankan
Keterangan
Penelepon KeRemoveQueue harus menguji apakah nilai pengembaliannya STATUS_TIMEOUT atau STATUS_USER_APC sebelum mengakses anggota entri apa pun. Menguji nilai pengembalian KeRemoveQueue terhadap NULL adalah kesalahan pemrograman.
Menentukan nilai nol untuk Batas Waktu menunjukkan ketidakmauan penelepon untuk menunggu entri jika antrean saat ini kosong. Menentukan penunjuk **Batas Waktu NULL* menunjukkan kesediaan penelepon untuk menunggu tanpa batas waktu untuk entri.
Jika parameter WaitMode adalah UserMode, tumpukan kernel dapat ditukar selama penantian. Akibatnya, penelepon tidak boleh mencoba meneruskan parameter pada tumpukan saat memanggil KeRemoveQueue dengan WaitMode diatur ke UserMode.
Menentukan WaitMode sebagai KernelMode dalam panggilan ke KeRemoveQueue mencegah tumpukan kernel utas panggilan ditukar, serta mencegah pengiriman panggilan prosedur asinkron mode pengguna (APC). Ini tidak mencegah pengiriman APC mode kernel, seperti yang digunakan oleh Manajer I/O untuk menyelesaikan RUNPS, ketika utas memanggil KeRemoveQueue dari IRQL PASSIVE_LEVEL. Pengiriman APC mode kernel seperti itu tidak mencegah utas panggilan menunggu objek antrean atau dikirim untuk eksekusi dengan entri setelah APC kernel berjalan.
Untuk informasi selengkapnya tentang menggunakan antrean internal yang dikelola driver, lihat Antrean yang Dikelola Driver.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | ntifs.h (termasuk Ntifs.h, FltKernel.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |