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

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

Синтаксис

LONG KeInsertQueue(
  [in, out] PRKQUEUE    Queue,
  [in, out] PLIST_ENTRY Entry
);

Параметры

[in, out] Queue

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

[in, out] Entry

Указатель на запись для постановки в очередь. Этот указатель должен быть адресом резидентного системного пространства.

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

KeInsertQueue возвращает предыдущее состояние сигнала заданной очереди. Если до вызова KeInsertQueue было задано значение ноль (т. е. без сигнала), keInsertQueue возвращает ноль, то есть записи не помещались в очередь. Если это было ненулевое (по сигналу), KeInsertQueue возвращает количество записей, которые были поставлены в очередь до вызова KeInsertQueue .

Комментарии

Записи, которые будут помещены в очередь с помощью KeInsertQueue, должны быть выделены из пула без паг. Например, память для записей, определяемых вызывающим объектом, можно выделить с помощью ExAllocatePoolWithTag. Если вызывающий объект выделяет записи фиксированного размера, создание списка lookaside с помощью ExInitializeNPagedLookasideList и выделение из него с помощью ExAllocateFromNPagedLookasideList является более эффективным, чем частые вызовы ExAllocatePoolWithTag, особенно для записей, размер которых не кратен PAGE_SIZE.

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

Если при вызове KeInsertQueue потоки не ожидают объекта очереди, данная запись вставляется в очередь, а состояние сигнала объекта очереди увеличивается.

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

Требования

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

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

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue