FltPerformAsynchronousIo-Funktion (fltkernel.h)
Ein Minifiltertreiber ruft FltPerformAsynchronousIo auf, um einen asynchronen E/A-Vorgang zu initiieren.
Syntax
NTSTATUS FLTAPI FltPerformAsynchronousIo(
[in, out] PFLT_CALLBACK_DATA CallbackData,
[in] PFLT_COMPLETED_ASYNC_IO_CALLBACK CallbackRoutine,
[in] PVOID CallbackContext
);
Parameter
[in, out] CallbackData
Zeiger auf eine Rückrufdatenstruktur (FLT_CALLBACK_DATA), die von einem vorherigen Aufruf von FltAllocateCallbackData zugeordnet wurde. Dieser Parameter ist erforderlich und darf nicht NULL sein. Der Aufrufer ist für das Freigeben dieser Struktur verantwortlich, wenn sie nicht mehr benötigt wird, indem FltFreeCallbackData aufgerufen wird.
[in] CallbackRoutine
Zeiger auf eine PFLT_COMPLETED_ASYNC_IO_CALLBACK typisierte Rückrufroutine, die aufgerufen werden soll, wenn der E/A-Vorgang abgeschlossen ist. Hinweis: Der Filter-Manager ruft diese Routine auf, nachdem er die Postoperation-Rückrufroutinen (PFLT_POST_OPERATION_CALLBACK) aller Minifiltertreiber aufgerufen hat, deren Instanzen unterhalb des initiierenden instance angefügt sind (angegeben im Instanzparameter zu FltAllocateCallbackData). Dieser Parameter ist erforderlich und darf nicht NULL sein. Der Filter-Manager ruft diese Routine immer auf, auch wenn FltPerformAsynchronousIo ausfällt.
[in] CallbackContext
Kontextzeiger, der an callbackRoutine übergeben werden soll Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
FltPerformAsynchronousIo gibt STATUS_SUCCESS zurück, um anzugeben, dass der E/A-Vorgang vom Dateisystem abgeschlossen wurde und die Rückrufroutine aufgerufen wurde, auf die CallbackRoutine verweist. Andernfalls wird ein entsprechender NTSTATUS-Wert zurückgegeben, z. B. einer der folgenden:
Rückgabecode | Beschreibung |
---|---|
STATUS_FLT_INVALID_ASYNCHRONOUS_REQUEST | IRP_MJ_CREATE Anforderungen können nicht asynchron ausgeführt werden. Dies ist ein Fehlercode. |
STATUS_PENDING | Der Vorgang wurde STATUS_PENDING zurückgegeben. Der Filter-Manager ruft die Rückrufroutine auf, auf die CallbackRoutine verweist, wenn der E/A-Vorgang abgeschlossen ist. Dieser Code gibt nur an, dass der Vorgang initiiert wurde. |
STATUS_FLT_IO_COMPLETE | Der Vorgang wurde durch die Voroperationsrückrufroutine des Minifiltertreibers abgeschlossen, dessen Instanzen unterhalb des initiierenden instance angefügt sind. |
Hinweise
Ein Minifiltertreiber ruft FltPerformAsynchronousIo auf, um einen asynchronen E/A-Vorgang zu initiieren, nachdem FltAllocateCallbackData aufgerufen wurde , um eine Rückrufdatenstruktur für den Vorgang zuzuweisen.
FltPerformAsynchronousIo sendet den E/A-Vorgang nur an die Minifiltertreiberinstanzen, die unterhalb der initiierenden instance angefügt sind (angegeben im Instance-Parameter an FltAllocateCallbackData) und an das Dateisystem. Minifiltertreiber, die über den angegebenen instance angefügt sind, empfangen den E/A-Vorgang nicht.
Minifiltertreiber können nur IRP-basierte E/A-Vorgänge initiieren. Sie können keine schnellen E/A- oder FSFilter-Rückrufvorgänge (File System Filter) initiieren.
Minifiltertreiber sollten FltPerformAsynchronousIo nur für asynchrone E/A-Vorgänge verwenden, für die Routinen wie die folgenden nicht verwendet werden können:
IRP_MJ_CREATE Anforderungen können nicht asynchron ausgeführt werden.
Die Rückrufdatenstruktur (FLT_CALLBACK_DATA) kann jederzeit freigegeben oder wiederverwendet werden, nachdem die Rückrufroutine aufgerufen wurde, auf die CallbackRoutine verweist. Der Aufrufer kann die Rückrufdatenstruktur freigeben, indem er FltFreeCallbackData aufruft oder sie durch Aufrufen von FltReuseCallbackData für die Wiederverwendung vorbereiten kann.
Hinweis
STATUS_SUCCESS und STATUS_FLT_IO_COMPLETE geben an, dass der E/A-Vorgang abgeschlossen wurde, aber nicht den endgültigen status des E/A-Vorgangs. Um den tatsächlichen Vorgang zu ermitteln, status von den zugrunde liegenden Minifiltertreibern, Filtertreibern und Dateisystem zurückgegeben werden, sollte callbackRoutine das IoStatus-Element der Rückrufdatenstruktur untersuchen, die im CallbackContext-Parameter von CallbackRoutine empfangen wurde.
Da der Filter-Manager immer die Rückrufroutine aufruft, auf die CallbackRoutine verweist, kann der Minifiltertreiber die Freigabe- oder Wiederverwendungsvorgänge direkt in der Rückrufroutine ausführen, auch wenn FltPerformAsynchronousIo ausfällt.
Der Aufrufer von FltPerformAsynchronousIo kann unter IRQL <= APC_LEVEL ausgeführt werden, wenn das IRP_PAGING_IO-Flag im IrpFlags-Element der FLT_IO_PARAMETER_BLOCK-Struktur für den Vorgang festgelegt ist. (Dieses Flag ist nur für IRP_MJ_READ-, IRP_MJ_WRITE-, IRP_MJ_QUERY_INFORMATION- und IRP_MJ_SET_INFORMATION-Vorgänge gültig.) Andernfalls muss der Aufrufer bei IRQL PASSIVE_LEVEL ausgeführt werden.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | fltkernel.h (include Fltkernel.h) |
Bibliothek | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | Weitere Informationen finden Sie im Abschnitt mit den Hinweisen. |