FltRequestOperationStatusCallback-Funktion (fltkernel.h)

FltRequestOperationStatusCallback gibt status Informationen 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 darf nicht NULL sein.

[in] CallbackRoutine

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

[in, optional] RequesterContext

Ein Kontextzeiger, der an callbackRoutine übergeben werden soll. Dieser Parameter ist optional und kann NULL sein.

Rückgabewert

FltRequestOperationStatusCallback gibt STATUS_SUCCESS oder einen geeigneten NTSTATUS-Wert zurück, z. B. einen der folgenden:

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

Hinweise

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

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

FltRequestOperationStatusCallback kann nur aus der PFLT_PRE_OPERATION_CALLBACK-Routine (Preoperation Callback) eines Minifiltertreibers aufgerufen werden.

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

Wenn es sich bei dem IRP-basierten Vorgang um eine IRP_MJ_CLOSE-Anforderung handelt, wird STATUS_INVALID_PARAMETER zurückgegeben.

FltRequestOperationStatusCallback kopiert den Inhalt des E/A-Parameterblocks (FLT_IO_PARAMETER_BLOCK) in den Iopb-Member der Rückrufdaten (FLT_CALLBACK_DATA). Dies sind die Rückrufdaten, die der Filter-Manager an die im Parameter CallbackRoutine angegebene Routine übergibt. Die kopierten Daten stellen eine Momentaufnahme des E/A-Parameterblocks zu dem Zeitpunkt dar, zu dem die PFLT_PRE_OPERATION_CALLBACK-Routine (Preoperation Callback) FltRequestOperationStatusCallback aufruft. Wenn die Voroperations-Rückrufroutine den E/A-Parameterblock nach dem Aufruf von FltRequestOperationStatusCallback ändert, unterscheidet sich der E/A-Parameterblock, den der Filter-Manager an CallbackRoutine übergibt, von dem E/A-Parameterblock, den der Filtertreiber beim Aufrufen von IoCallDriver im Treiberstapel übergibt.

Der folgende Beispielcode aus einer Voroperationsrückrufroutine veranschaulicht, wie dies geschehen 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 FltRequestOperationStatusCallback geändert. Wenn der Filter-Manager also CallbackRoutine aufruft, wird ein Zeiger auf den alten Puffer anstelle des neuen Puffers übergeben.

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

Anforderungen

Anforderung Wert
Zielplattform Universell
Header fltkernel.h (fltkernel.h einschließen)
Bibliothek Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Weitere Informationen

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

IoCallDriver

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK