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 |
---|---|
|
Die Instanz des Minifiltertreibers wird heruntergerissen. Dies ist ein Fehlercode. |
|
FltRequestOperationStatusCallback ein Poolzuordnungsfehler aufgetreten ist. Dies ist ein Fehlercode. |
|
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 |