Fungsi KeInsertHeadQueue (ntifs.h)
Rutinitas KeInsertHeadQueue menyisipkan entri di kepala antrean yang diberikan jika tidak dapat segera menggunakan entri untuk memenuhi tunggu utas.
Sintaks
LONG KeInsertHeadQueue(
[in, out] PRKQUEUE Queue,
[in, out] PLIST_ENTRY Entry
);
Parameter
[in, out] Queue
Penunjuk ke objek antrean yang diinisialisasi yang pemanggilnya menyediakan penyimpanan residen di kumpulan yang tidak disebarkan. Struktur ini didefinisikan sebagai berikut:
typedef struct _KQUEUE {
DISPATCHER_HEADER Header;
LIST_ENTRY EntryListHead;
ULONG CurrentCount;
ULONG MaximumCount;
LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
Anggota | Makna |
---|---|
Header | Header antrean |
EntryListHead | Penunjuk ke entri pertama dalam antrean |
CurrentCount | Jumlah entri dalam antrean |
MaximumCount | Jumlah maksimum entri yang dapat dimuat antrean |
ThreadListHead | Penunjuk ke entri pertama dalam daftar utas |
[in, out] Entry
Arahkan ke entri antrean yang akan disisipkan. Pointer ini harus berupa alamat ruang sistem residen.
Mengembalikan nilai
KeInsertHeadQueue mengembalikan status sinyal sebelumnya dari antrean yang diberikan. Jika diatur ke nol (tidak diberi sinyal) sebelum KeInsertHeadQueue dipanggil, KeInsertHeadQueue mengembalikan nol, yang berarti bahwa tidak ada entri yang diantrekan. Jika bukan nol (diberi sinyal), KeInsertHeadQueue mengembalikan jumlah entri yang diantrekan sebelum KeInsertHeadQueue dipanggil.
Keterangan
Entri yang akan diantrekan oleh KeInsertHeadQueue harus dialokasikan dari kumpulan yang tidak disebarkan. Misalnya, memori untuk entri yang ditentukan pemanggil dapat dialokasikan dengan ExAllocatePoolWithTag. Jika penelepon mengalokasikan entri dengan ukuran tetap, membuat daftar lookaside dengan ExInitializeNPagedLookasideList dan mengalokasikannya dengan ExAllocateFromNPagedLookasideList lebih efisien daripada sering melakukan panggilan ke ExAllocatePoolWithTag, terutama untuk entri yang ukurannya bukan kelipatan PAGE_SIZE.
Jika ada utas yang menunggu objek antrean saat KeInsertHeadQueue dipanggil, penantian satu utas terpenuhi oleh panggilan ini. Utas dikirim untuk eksekusi dengan penunjuk Entri yang diberikan.
Jika saat ini tidak ada utas yang menunggu objek antrean saat KeInsertHeadQueue dipanggil, entri yang diberikan dimasukkan dalam antrean dan status sinyal objek antrean bertahap.
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) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
Aturan kepatuhan DDI | HwStorPortProhibitedDDIs(storport) |
Lihat juga
ExAllocateFromNPagedLookasideList
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk