Bagikan melalui


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)

Lihat juga

KeInsertHeadQueue

KeInsertQueue