Функция 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, указанная запись вставляется в очередь, а состояние сигнала объекта очереди увеличивается.

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

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ntifs.h (include Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
правил соответствия DDI HwStorPortProhibitedDIs(storport)

См. также

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue