Freigeben über


FltReissueSynchronousIo-Funktion (fltkernel.h)

FltReissueSynchronousIo initiiert einen neuen synchronen E/A-Vorgang, der die Parameter eines zuvor synchronisierten E/A-Vorgangs verwendet.

Syntax

VOID FLTAPI FltReissueSynchronousIo(
  [in] PFLT_INSTANCE      InitiatingInstance,
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parameter

[in] InitiatingInstance

Ein undurchsichtiger instance Zeiger auf den Minifiltertreiber instance, der den E/A-Vorgang erneut ausgibt. Muss die gleiche instance sein, die den vorherigen E/A-Vorgang initiiert hat. Dieser Parameter ist erforderlich und kann nicht auf NULL festgelegt werden.

[in] CallbackData

Ein Zeiger auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA) aus einem zuvor synchronisierten E/A-Vorgang. Dieser Parameter ist erforderlich und kann nicht auf NULL festgelegt werden.

Rückgabewert

Keine

Bemerkungen

Ein Minifiltertreiber ruft FltReissueSynchronousIo aus einer Postoperation-Rückrufroutine (PFLT_POST_OPERATION_CALLBACK) auf, um eine synchronisierte E/A-Anforderung erneut auszuführen. In der Regel wird FltReissueSynchronousIo aus einer Rückrufroutine nach der Operation aufgerufen, um einen fehlgeschlagenen Vorgang mit anderen Parametern erneut auszuführen oder eine Analysezurücksprung zu behandeln. Es kann jedoch auch FltReissueSynchronousIo aufrufen, um E/A-Vorgänge erneut auszuführen, die der Minifiltertreiber durch Aufrufe der Routinen FltAllocateCallbackData und FltPerformSynchronousIo generiert hat. In dieser Situation spielt es keine Rolle, ob FltReissueSynchronousIo in einer Postoperation-Rückrufroutine oder außerhalb des Kontexts einer Vorgangsrückrufroutine aufgerufen wird. Für Aufrufe außerhalb des Kontexts einer Rückrufroutine nach der Operation sollten Sie stattdessen die Routinen FltReuseCallbackData und FltPerformSynchronousIo verwenden.

Der Aufrufer kann den Inhalt des E/A-Parameterblocks der Rückrufdatenstruktur (FLT_CALLBACK_DATA) ändern, bevor die E/A-Anforderung erneut ausgestellt wird. Wenn dies der Fall ist, muss fltSetCallbackDataDirty aufgerufen werden, bevor FltReissueSynchronousIo aufgerufen wird.

Wenn beispielsweise ein Minifiltertreiber Analysepunkte verwendet und seine Rückrufroutine nach der Erstellung für einen Erstellungsvorgang aufgerufen wird, der STATUS_REPARSE zurückgegeben hat, kann der Minifiltertreiber den Erstellungsvorgang für seine eigenen Analysepunkte erneut ausführen. In diesem Fall führt der Minifiltertreiber die folgenden Schritte aus:

  1. Legen Sie das flag FILE_OPEN_REPARSE_POINT im E/A-Parameterblock der Rückrufdatenstruktur fest.

  2. Rufen Sie FltSetCallbackDataDirty auf.

  3. Rufen Sie FltReissueSynchronousIo auf, um die Erstellungsanforderung erneut ausstellen zu können.

Der Filter-Manager sendet die neu ausgestellte E/A-Anforderung nur an die Minifiltertreiberinstanzen, die unterhalb der initiierenden instance (im Parameter InitiatingInstance angegeben) angefügt sind, und an das Dateisystem. Minifilter-Treiberinstanzen, die über dem initiierenden instance angefügt sind, erhalten die neu ausgestellte E/A-Anforderung nicht.

Nur synchronisierte E/A-Vorgänge können erneut ausgegeben werden. Um dem Treiber die Möglichkeit zu geben, erneut auszugeben, indem FltReissueSynchronousIo in der Rückrufroutine nach der Operation aufgerufen wird, muss ein Minifiltertreiber FLT_PREOP_SYNCHRONIZE in der Rückrufroutine vor der Operation zurückgeben.

Hinweis

Der Minifiltertreiber ruft die FltIsOperationSynchronous-Routine nicht auf, um zu bestimmen, ob die Präoperationsrückrufroutine für diesen Vorgang FLT_PREOP_SYNCHRONIZE zurückgegeben hat. Der Minifiltertreiber ruft FltIsOperationSynchronous auf, um zu bestimmen, ob der Vorgang selbst aus Sicht des E/A-Managers synchron ist.

Nur IRP-basierte E/A-Vorgänge können erneut ausgegeben werden. Schnelle E/A-Vorgänge und FSFilter-Rückrufvorgänge (File System Filter) können nicht erneut ausgegeben werden. Verwenden Sie das Makro FLT_IS_IRP_OPERATION , um zu bestimmen, ob ein E/A-Vorgang IRP-basiert.

Ein IRP_MJ_CREATE-Erstellungsvorgang, der abgebrochen wurde, kann nicht erneut ausgegeben werden. Vor dem Aufrufen von FltReissueSynchronousIo für einen Erstellungsvorgang sollten Aufrufer den Flags-Member des Dateiobjekts auf den Erstellungsvorgang überprüfen. Wenn das FO_FILE_OPEN_CANCELLED-Flag festgelegt ist, bedeutet dies, dass der Erstellungsvorgang abgebrochen wurde und ein Schließenvorgang (IRP_MJ_CLOSE) für dieses Dateiobjekt ausgegeben wird. Wenn FltReissueSynchronousIo für einen abgebrochenen Erstellungsvorgang aufgerufen wird, schlägt der Filter-Manager die neu ausgestellte E/A-Anforderung mit STATUS_CANCELLED fehl.

Hinweis

Wenn Minifiltertreiber die Erstellung im Rückruf nach der Erstellung erneut ausgeben, müssen sie den Puffer, der ihrem Analysepunkt zugeordnet ist (Feld TagData in CallbackData) nicht auf NULL festlegen. Stattdessen gibt der Filter-Manager den Puffer für sie frei und legt diesen auf NULL fest.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Updaterollup 1 für SP4; Windows XP SP2
Unterstützte Mindestversion (Server) Windows Server 2003 SP1
Zielplattform Universell
Header fltkernel.h (fltKernel.h einschließen)
Bibliothek FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL (Nicht-Paging-E/A kann nur bei PASSIVE_LEVEL erneut ausgestellt werden)

Weitere Informationen

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS für IRP_MJ_CREATE

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK