Freigeben über


FltRequestOperationStatusCallback-Funktion (fltkernel.h)

FltRequestOperationStatusCallback Statusinformationen für den angegebenen E/A-Vorgang zurück.

Syntax

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

Parameter

[in] Data

Ein Zeiger auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA) für den E/A-Vorgang. Dieser Parameter ist erforderlich und kann nicht NULL-werden.

[in] CallbackRoutine

Ein Zeiger auf eine Rückrufroutine, die der Filter-Manager aufruft, nachdem IoCallDriver zurückgegeben wurde. Dieser Parameter ist erforderlich und kann nicht NULL-werden.

[in, optional] RequesterContext

Ein Kontextzeiger, der an die CallbackRoutineübergeben werden soll. Dieser Parameter ist optional und kann NULL-werden.

Rückgabewert

FltRequestOperationStatusCallback gibt STATUS_SUCCESS oder einen geeigneten NTSTATUS-Wert wie einen der folgenden zurück:

Rückgabecode Beschreibung
STATUS_FLT_DELETING_OBJECT
Die Instanz des Minifiltertreibers wird heruntergerissen. Dies ist ein Fehlercode.
STATUS_INSUFFICIENT_RESOURCES
FltRequestOperationStatusCallback ein Poolzuordnungsfehler aufgetreten ist. Dies ist ein Fehlercode.
STATUS_INVALID_PARAMETER
FltRequestOperationStatusCallback- wurde von einer Routine aufgerufen, die keine Preoperation-Rückrufroutine (PFLT_PRE_OPERATION_CALLBACK) war oder der E/A-Vorgang eine IRP_MJ_CLOSE Anforderung war. Dies ist ein Fehlercode.

Bemerkungen

Ein Minifiltertreiber kann FltRequestOperationStatusCallback- für einen IRP-basierten E/A-Vorgang aufrufen, um den Statuswert abzurufen, der für den Vorgang IoCallDriver zurückgegeben.

Die meisten Minifiltertreiber müssen nie FltRequestOperationStatusCallbackaufrufen. Normalerweise ruft ein Minifiltertreiber diese Routine nur auf, um festzustellen, ob ein angeforderter Oplock gewährt wurde.

FltRequestOperationStatusCallback- kann nur aus der Preoperationsrückrufroutine (PFLT_PRE_OPERATION_CALLBACK) eines Minifiltertreibers aufgerufen werden.

FltRequestOperationStatusCallback- kann nur für nicht IRP_MJ_CLOSE IRP-basierte Vorgänge aufgerufen werden. Um zu bestimmen, ob es sich bei dem Vorgang um einen IRP-basierten Vorgang handelt, verwenden Sie das FLT_IS_IRP_OPERATION Makro.

Wenn der IRP-basierte Vorgang eine IRP_MJ_CLOSE Anforderung ist, wird STATUS_INVALID_PARAMETER zurückgegeben.

FltRequestOperationStatusCallback kopiert den Inhalt des E/A-Parameterblocks (FLT_IO_PARAMETER_BLOCK) in das Iopb Member der Rückrufdaten (FLT_CALLBACK_DATA), und dies sind die Rückrufdaten, die der Filter-Manager an die im CallbackRoutine Parameter angegebene Routine übergibt. Die kopierten Daten stellen eine Momentaufnahme des E/A-Parameterblocks zum Zeitpunkt dar, zu dem der Preoperation-Rückruf (PFLT_PRE_OPERATION_CALLBACK) FltRequestOperationStatusCallbackaufruft. Wenn die Preoperation-Rückrufroutine den E/A-Parameterblock nach dem Aufrufen FltRequestOperationStatusCallbackändert, unterscheidet sich der I/O-Parameterblock, den der Filter-Manager an CallbackRoutine übergeben wird, vom E/A-Parameterblock, den der Filtertreiber beim Aufrufen IoCallDriverübergibt.

Der folgende Beispielcode aus einer Voroperationsrückrufroutine veranschaulicht, wie dies passieren kann:

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;
    ...
}

Im Beispiel wird der Lesepuffer nach dem Aufruf von FltRequestOperationStatusCallbackgeändert. Wenn der Filter-Manager also CallbackRoutine-aufruft, wird er anstelle des neuen Puffers in einen Zeiger an den alten Puffer übergeben.

Der Filter-Manager ruft die angegebene CallbackRoutine- im Kontext des ursprünglichen Threads bei IRQL <= APC_LEVEL auf.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library Fltmgr.lib
DLL- Fltmgr.sys
IRQL- <= APC_LEVEL

Siehe auch

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

IoCallDriver-

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK