Функция 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