Функция KeInitializeQueue (ntifs.h)

Подпрограмма KeInitializeQueue инициализирует объект очереди, в котором потоки могут ждать записи.

Синтаксис

void KeInitializeQueue(
  [out] PRKQUEUE Queue,
  [in]  ULONG    Count
);

Параметры

[out] Queue

Указатель на структуру KQUEUE, для которой вызывающий объект должен предоставить резидентное хранилище в невыгразданном пуле. Эта структура определяется следующим образом:

typedef struct _KQUEUE {
    DISPATCHER_HEADER Header;
    LIST_ENTRY EntryListHead;
    ULONG CurrentCount;
    ULONG MaximumCount;
    LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
Член Значение
Верхняя часть Заголовок очереди.
EntryListHead Указатель на первую запись в очереди.
CurrentCount Текущее число потоков, ожидающих в очереди.
MaximumCount Максимальное количество параллельных потоков, которых может удовлетворить очередь.
ThreadListHead Указатель на первую запись в списке потоков.

[in] Count

Максимальное количество потоков, для которых ожидает объект очереди, может быть удовлетворено одновременно. Если этот параметр не указан, используется количество процессоров на компьютере.

Возвращаемое значение

None

Remarks

Обычно вызывающий объект KeInitializeQueue также создает набор выделенных потоков для постановки в очередь и вывода из очереди своих записей. Такой вызывающий объект может указать явное значение Count , чтобы предотвратить одновременное ожидание слишком большого числа выделенных потоков в объекте очереди.

KeInitializeQueue устанавливает начальное состояние сигнала объекта очереди в Значение Not Signaled.

Дополнительные сведения об использовании внутренних очередей, управляемых драйвером, см. в разделе Очереди IRP, управляемые драйвером.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

См. также раздел

ExAllocatePoolWithTag

IoAllocateWorkItem

IoQueueWorkItem

KeInsertQueue

KeRemoveQueue

KeRundownQueue

PsCreateSystemThread