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