Função KeRemoveQueue (ntifs.h)

A rotina KeRemoveQueue fornece ao thread de chamada um ponteiro para uma entrada desativada do objeto de fila fornecido ou permite que o chamador aguarde, até um intervalo de tempo limite opcional, no objeto de fila.

Sintaxe

PLIST_ENTRY KeRemoveQueue(
  [in, out]      PRKQUEUE        Queue,
  [in]           KPROCESSOR_MODE WaitMode,
  [in, optional] PLARGE_INTEGER  Timeout
);

Parâmetros

[in, out] Queue

Ponteiro para um objeto de fila inicializado para o qual o chamador fornece armazenamento residente em pool nãopagado.

[in] WaitMode

O modo de processador no qual o chamador está aguardando, que pode ser KernelMode ou UserMode. Se alguma coisa em sua pilha puder ser acessada em IRQL >= DISPATCH_LEVEL, o chamador deverá especificar KernelMode.

[in, optional] Timeout

Ponteiro para uma variável que especifica o tempo absoluto ou relativo, em unidades de 100 nanossegundos, em que a espera deve expirar. Se o valor de Timeout for negativo, o tempo de expiração será relativo à hora atual do sistema; caso contrário, é absoluto. Os tempos de expiração absolutos acompanham as alterações na hora do sistema; os tempos de expiração relativos não são afetados pelas alterações de tempo do sistema. Este ponteiro pode ser nulo.

Retornar valor

KeRemoveQueue retorna um dos seguintes:

  • Um ponteiro para uma entrada removida do objeto de fila fornecido, se houver um disponível.
  • STATUS_TIMEOUT, se o intervalo de tempo limite especificado expirou antes de uma entrada ficar disponível
  • STATUS_USER_APC, se um APC no modo de usuário foi entregue no contexto do thread de chamada
  • STATUS_ABANDONED, se a fila tiver sido executada

Comentários

Os chamadores de KeRemoveQueue devem testar se seu valor retornado é STATUS_TIMEOUT ou STATUS_USER_APC antes de acessar qualquer membro de entrada. Testar o valor retornado de KeRemoveQueue em relação a NULL é um erro de programação.

Especificar um valor zero para Timeout indica a relutância do chamador em aguardar uma entrada se a fila estiver vazia no momento. Especificar um ponteiro de tempo limite **NULL* indica a disposição do chamador de aguardar indefinidamente por uma entrada.

Se o parâmetro WaitMode for UserMode, a pilha de kernel poderá ser trocada durante a espera. Consequentemente, um chamador nunca deve tentar passar parâmetros na pilha ao chamar KeRemoveQueue com WaitMode definido como UserMode.

Especificar WaitMode como KernelMode em uma chamada para KeRemoveQueue impede que a pilha de kernel do thread de chamada seja trocada, bem como impedir a entrega de APC (chamadas de procedimento assíncrono) no modo de usuário. Ele não impede a entrega de APCs no modo kernel, como aquelas usadas pelo Gerenciador de E/S para concluir IRPs, quando um thread chama KeRemoveQueue do IRQL PASSIVE_LEVEL. A entrega desse APC no modo kernel não impede que o thread de chamada espere no objeto de fila nem seja expedido para execução com uma entrada após a execução do APC do kernel.

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 (include Ntifs.h, FltKernel.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Confira também

KeInsertHeadQueue

KeInsertQueue