Compartilhar via


Função FltCbdqRemoveIo (fltkernel.h)

FltCbdqRemoveIo remove um item específico da fila de dados de retorno de chamada de um driver de minifiltro.

Sintaxe

PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
  [in, out] PFLT_CALLBACK_DATA_QUEUE            Cbdq,
  [in]      PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);

Parâmetros

[in, out] Cbdq

Ponteiro para uma fila de dados de retorno de chamada com segurança de cancelamento. Essa fila deve ter sido inicializada chamando FltCbdqInitialize.

[in] Context

Ponteiro de contexto para o item a ser removido. Esse contexto é inicializado por FltCbdqInsertIo quando a solicitação de E/S é inserida pela primeira vez na fila. Esse parâmetro é necessário e deve ser não NULL.

Retornar valor

FltCbdqRemoveIo retorna um ponteiro para a estrutura de dados de retorno de chamada para a solicitação de E/S que foi removida da fila. Se nenhuma solicitação de E/S correspondente for encontrada ou se a fila estiver vazia, FltCbdqRemoveIo retornará NULL.

Comentários

FltCbdqRemoveIo remove a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) para uma operação de E/S específica da fila de dados de retorno de chamada de um driver de minifiltro. FltCbdqRemoveIo só pode ser usado para excluir uma estrutura de dados de retorno de chamada que tenha uma estrutura de contexto associada a ela. Essa associação é criada quando a estrutura de dados de retorno de chamada é inserida na fila de dados de retorno de chamada por FltCbdqInsertIo.

Os drivers de minifiltro podem usar as rotinas fltCbdqXxx para implementar uma fila de dados de retorno de chamada para operações de E/S baseadas em IRP. Usando essas rotinas, os drivers de minifiltro podem tornar suas filas canceladas seguras; o sistema manipula de forma transparente o cancelamento de E/S para os drivers de minifiltro.

As rotinas fltCbdqXxx só podem ser usadas para operações de E/S baseadas em IRP. Para determinar se uma determinada estrutura de dados de retorno de chamada representa uma operação de E/S baseada em IRP, use a macro FLT_IS_IRP_OPERATION .

Uma fila de dados de retorno de chamada é inicializada por FltCbdqInitialize. FltCbdqRemoveIo usa as rotinas fornecidas na tabela de expedição da fila para bloquear a fila e remover a estrutura de dados de retorno de chamada da fila. A operação de remoção em si é executada pela rotina de retorno de chamada CbdqRemoveIo do driver de minifiltro.

Se a fila estiver protegida por um bloqueio de rotação em vez de um objeto mutex ou variável de recurso, o chamador de FltCbdqRemoveIo poderá estar em execução em IRQL <= DISPATCH_LEVEL. Se um mutex ou recurso for usado, o chamador deverá estar em execução em IRQL <= APC_LEVEL.

Há uma possível corrida entre o gerenciador de filtros removendo uma solicitação de E/S cancelada e o driver de filtro removendo-a porque ela foi concluída. É importante observar que o contexto da solicitação permanece válido depois de ser removido pela primeira vez, o que fará com que uma segunda tentativa de remoção falhe.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
IRQL Consulte a seção Observações.

Confira também

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo