Partilhar via


Função KeInsertHeadQueue (ntifs.h)

A rotina KeInsertHeadQueue insere uma entrada no cabeçalho da fila determinada se 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 no 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 de 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 no sistema residente.

Valor de retorno

KeInsertHeadQueue retorna o estado de sinal anterior da fila determinada. Se ele foi definido como zero (não sinalizado) antes de keInsertHeadQueue foi chamado, KeInsertHeadQueue retorna 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 foi chamado.

Observações

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 esperando no 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 de 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 Driver-Managed Filas.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho ntifs.h (inclua Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport)

Consulte também

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertQueue

KeRemoveQueue