Freigeben über


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.

Weitere Informationen

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData

FltPerformSynchronousIo

FltReuseCallbackData

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK