Bagikan melalui


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

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertQueue

KeRemoveQueue