Função KeInsertHeadQueue (ntifs.h)

A rotina KeInsertHeadQueue inserirá uma entrada no cabeçalho da fila especificada se ela não puder usar imediatamente a entrada para satisfazer uma espera de thread.

Sintaxe

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

Parâmetros

[in, out] Queue

Ponteiro para um objeto de fila inicializado para o qual o chamador fornece armazenamento residente em pool nãopagado. Essa estrutura é definida da seguinte maneira:

typedef struct _KQUEUE {
    DISPATCHER_HEADER Header;
    LIST_ENTRY EntryListHead;
    ULONG CurrentCount;
    ULONG MaximumCount;
    LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
Membro Significado
Cabeçalho Cabeçalho da fila
EntryListHead Ponteiro para a primeira entrada na fila
Currentcount Número de entradas na fila
Maximumcount Número máximo de entradas que a fila pode conter
ThreadListHead Ponteiro para a primeira entrada na lista de threads

[in, out] Entry

Ponteiro para a entrada da fila que deve ser inserida. Esse ponteiro deve ser um endereço de espaço do sistema residente.

Retornar valor

KeInsertHeadQueue retorna o estado de sinal anterior da fila fornecida. Se ele foi definido como zero (não sinalizado) antes de KeInsertHeadQueue ser chamado, KeInsertHeadQueue retornará zero, o que significa que nenhuma entrada foi enfileirada. Se não for zero (sinalizado), KeInsertHeadQueue retornará o número de entradas que foram enfileiradas antes de KeInsertHeadQueue ser chamado.

Comentários

As entradas a serem enfileiradas por KeInsertHeadQueue devem ser alocadas do pool nãopagado. Por exemplo, a memória para entradas definidas pelo chamador pode ser alocada com ExAllocatePoolWithTag. Se o chamador alocar entradas de um tamanho fixo, criar uma lista lookaside com ExInitializeNPagedLookasideList e alocar dele com ExAllocateFromNPagedLookasideList é mais eficiente do que fazer chamadas frequentes para ExAllocatePoolWithTag, especialmente para entradas cujo tamanho não é um múltiplo de PAGE_SIZE.

Se algum thread estiver aguardando o objeto de fila quando KeInsertHeadQueue for chamado, a espera de um único thread será atendida por essa chamada. O thread é expedido para execução com o ponteiro De entrada fornecido.

Se nenhum thread estiver aguardando no objeto de fila quando KeInsertHeadQueue for chamado, a entrada fornecida será inserida na fila e o estado de sinal do objeto de fila será incrementado.

Para obter mais informações sobre como usar filas internas gerenciadas pelo driver, consulte Filas gerenciadas pelo driver.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDDIs(storport)

Confira também

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertQueue

KeRemoveQueue