Compartilhar via


Função FltRequestOperationStatusCallback (fltkernel.h)

FltRequestOperationStatusCallback retorna informações de status para a operação de E/S fornecida.

Sintaxe

NTSTATUS FLTAPI FltRequestOperationStatusCallback(
  [in]           PFLT_CALLBACK_DATA                 Data,
  [in]           PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
  [in, optional] PVOID                              RequesterContext
);

Parâmetros

[in] Data

Um ponteiro para a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) para a operação de E/S. Esse parâmetro é necessário e não pode ser NULL.

[in] CallbackRoutine

Um ponteiro para uma rotina de retorno de chamada que o Gerenciador de Filtros chama após IoCallDriver retorna. Esse parâmetro é necessário e não pode ser NULL.

[in, optional] RequesterContext

Um ponteiro de contexto a ser passado para o CallbackRoutine . Esse parâmetro é opcional e pode ser NULL.

Valor de retorno

FltRequestOperationStatusCallback retorna STATUS_SUCCESS ou um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_FLT_DELETING_OBJECT
A instância do driver de minifiltro está sendo demolida. Este é um código de erro.
STATUS_INSUFFICIENT_RESOURCES
fltRequestOperationStatusCallback encontrou uma falha de alocação de pool. Este é um código de erro.
STATUS_INVALID_PARAMETER
FltRequestOperationStatusCallback foi chamado de uma rotina que não era uma rotina de retorno de chamada de pré-operação (PFLT_PRE_OPERATION_CALLBACK) ou a operação de E/S era uma solicitação IRP_MJ_CLOSE. Este é um código de erro.

Observações

Um driver de minifiltro pode chamar FltRequestOperationStatusCallback para uma operação de E/S baseada em IRP para obter o valor de status que do IoCallDriver retornado para a operação.

A maioria dos drivers de minifiltro nunca precisa chamar FltRequestOperationStatusCallback . Normalmente, um driver de minifiltro só chama essa rotina para determinar se um oplock solicitado foi concedido.

FltRequestOperationStatusCallback só pode ser chamado da rotina de retorno de chamada de pré-operação (PFLT_PRE_OPERATION_CALLBACK) de um minifiltro driver.

FltRequestOperationStatusCallback só pode ser chamado para operações baseadas em IRP não IRP_MJ_CLOSE. Para determinar se a operação é uma operação baseada em IRP, use a macro FLT_IS_IRP_OPERATION.

Se a operação baseada em IRP for uma solicitação IRP_MJ_CLOSE, STATUS_INVALID_PARAMETER será retornado.

FltRequestOperationStatusCallback copia o conteúdo do bloco de parâmetros de E/S (FLT_IO_PARAMETER_BLOCK) para o membro Iopb dos dados de retorno de chamada (FLT_CALLBACK_DATA) e esses são os dados de retorno de chamada que o Gerenciador de Filtros passará para a rotina especificada no parâmetro CallbackRoutine. Os dados copiados representam um instantâneo do bloco de parâmetros de E/S no momento em que a rotina de retorno de chamada de pré-operação (PFLT_PRE_OPERATION_CALLBACK) chama FltRequestOperationStatusCallback. Se a rotina de retorno de chamada de pré-operação alterar o bloco de parâmetros de E/S depois de chamar FltRequestOperationStatusCallback, o bloco de parâmetros de E/S que o Gerenciador de Filtros passa para callbackRoutine será diferente do bloco de parâmetros de E/S que o driver de filtro passa para baixo na pilha de driver quando chama IoCallDriver.

O código de exemplo a seguir de uma rotina de retorno de chamada de pré-operação ilustra como isso pode acontecer:

PFLT_CALLBACK_DATA Data;
PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine;
PVOID RequesterContext;
...
if (iopb->MajorFunction == IRP_MJ_READ) {
    FltRequestOperationStatusCallback (Data, CallbackRoutine, RequesterContext);
 Data->Iopb->Parameters.Read.ReadBuffer = newBuffer;
    ...
}

No exemplo, o buffer de leitura é alterado após a chamada para FltRequestOperationStatusCallback, portanto, quando o Gerenciador de Filtros chama CallbackRoutine, ele passa um ponteiro para o buffer antigo em vez do novo.

O Gerenciador de Filtros chama o CallbackRoutine fornecido no contexto do thread de origem em IRQL <= APC_LEVEL.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho fltkernel.h (inclua Fltkernel.h)
biblioteca Fltmgr.lib
de DLL Fltmgr.sys
IRQL <= APC_LEVEL

Consulte também

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

do IoCallDriver

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK