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 einem vorherigen Aufruf von FltAllocateCallbackData-zugeordnet wurde. Dieser Parameter ist erforderlich und kann nicht NULL-werden. Der Aufrufer ist dafür verantwortlich, diese Struktur freizusprechen, wenn sie nicht mehr benötigt wird, indem FltFreeCallbackDataaufgerufen wird.

[in] CallbackRoutine

Zeigen Sie auf eine PFLT_COMPLETED_ASYNC_IO_CALLBACK-typierte 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 aufruft, deren Instanzen unterhalb der initiierenden Instanz angefügt sind (im parameter Instance angegeben, um FltAllocateCallbackData). Dieser Parameter ist erforderlich und kann nicht NULL-werden. Der Filter-Manager ruft diese Routine immer auf, auch wenn FltPerformAsynchronousIo fehlschlägt.

[in] CallbackContext

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

Rückgabewert

FltPerformAsynchronousIo gibt STATUS_SUCCESS zurück, um anzugeben, dass der E/A-Vorgang vom Dateisystem abgeschlossen wurde, und die Rückrufroutine, auf die CallbackRoutine verweist, aufgerufen wurde. Andernfalls wird ein entsprechender NTSTATUS-Wert zurückgegeben, z. B. einen 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 hat STATUS_PENDING zurückgegeben. Der Filter-Manager ruft die Rückrufroutine auf, die CallbackRoutine darauf verweist, wann 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 der initiierenden Instanz angefügt sind.

Bemerkungen

Ein Minifiltertreiber ruft FltPerformAsynchronousIo auf, um einen asynchronen E/A-Vorgang nach dem Aufruf FltAllocateCallbackData zu initiieren, um eine Rückrufdatenstruktur für den Vorgang zuzuweisen.

FltPerformAsynchronousIo sendet den E/A-Vorgang nur an die Minifiltertreiberinstanzen, die unterhalb der initiierenden Instanz angefügt sind (im parameter Instance angegeben an FltAllocateCallbackData) und das Dateisystem. Über der angegebenen Instanz angefügte Minifiltertreiber erhalten den E/A-Vorgang nicht.

Minifiltertreiber können nur IRP-basierte E/A-Vorgänge initiieren. Sie können keine schnellen E/A- oder Dateisystemfiltervorgänge (FSFilter) 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 CallbackRoutine Punkte aufgerufen wurde. Der Aufrufer kann die Rückrufdatenstruktur freigeben, indem FltFreeCallbackData aufgerufen oder durch Aufrufen FltReuseCallbackDatafür die Wiederverwendung vorbereitet wird.

Anmerkung

STATUS_SUCCESS und STATUS_FLT_IO_COMPLETE zeigen an, dass der E/A-Vorgang abgeschlossen wurde, aber nicht den endgültigen Status des E/A-Vorgangs angeben. Um den tatsächlichen Vorgangsstatus zu ermitteln, der von den zugrunde liegenden Minifiltertreibern, Filtertreibern und Dateisystem zurückgegeben wird, sollte die CallbackRoutine- das IoStatus-Element der rückrufdatenstruktur untersuchen, die in der CallbackRoutine's CallbackContext Parameter empfangen wurde.

Da der Filter-Manager immer die Rückrufroutine aufruft, auf die CallbackRoutine verweist, auch wenn FltPerformAsynchronous Io fehlschlägt, kann der Minifiltertreiber die Frei- oder Wiederverwendevorgänge direkt in der Rückrufroutine ausführen.

Der Aufrufer von FltPerformAsynchronousIo kann bei IRQL <= APC_LEVEL ausgeführt werden, wenn das IRP_PAGING_IO Flag im IrpFlags Member der FLT_IO_PARAMETER_BLOCK Struktur für den Vorgang festgelegt ist. (Dieses Kennzeichen 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 unter IRQL-PASSIVE_LEVEL ausgeführt werden.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
DLL- Fltmgr.sys
IRQL- Siehe Abschnitt "Hinweise".

Siehe auch

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FltAllocateCallbackData

FltFreeCallbackData-

FltPerformSynchronousIo

FltReuseCallbackData-

IRP_MJ_CREATE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_POST_OPERATION_CALLBACK