Freigeben über


FltReissueSynchronousIo-Funktion (fltkernel.h)

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

Syntax

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

Parameter

[in] InitiatingInstance

Ein undurchsichtiger Instanzzeiger auf die Minifilter-Treiberinstanz, die den E/A-Vorgang erneut angibt. Muss dieselbe Instanz 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

Nichts

Bemerkungen

Ein Minifiltertreiber ruft FltReissueSynchronousIo aus einer Postoperationsrückrufroutine (PFLT_POST_OPERATION_CALLBACK) auf, um eine synchronisierte E/A-Anforderung erneut aufzurufen. Es ruft in der Regel FltReissueSynchronousIo aus einer Postoperation-Rückrufroutine auf, um einen fehlgeschlagenen Vorgang mit verschiedenen Parametern erneut aufzurufen oder eine Reparse-Unzustellbarkeit zu behandeln. Es kann jedoch auch FltReissueSynchronousIo aufrufen, um E/A erneut aufzurufen, die der Minifiltertreiber durch Aufrufe der FltAllocateCallbackData und FltPerformSynchronousIo Routinen generiert hat. In dieser Situation spielt es keine Rolle, ob sie FltReissueSynchronousIo in einer Postoperationsrückrufroutine oder außerhalb des Kontexts einer Vorgangsrückrufroutine aufruft. Für Aufrufe außerhalb des Kontexts einer Postoperationsrückrufroutine sollten Sie stattdessen die FltReuseCallbackData- und FltPerformSynchronousIo Routinen verwenden.

Der Aufrufer kann den Inhalt der Rückrufdaten (FLT_CALLBACK_DATA) des E/A-Parameterblocks der Struktur ändern, bevor die E/A-Anforderung erneut ausgeführt wird. Wenn dies der Fall ist, muss es FltSetCallbackDataDirty aufrufen, bevor FltReissueSynchronousIoaufgerufen wird.

Wenn z. B. ein Minifiltertreiber Reparsepunkte verwendet und seine Rückrufroutine nach dem Erstellen für einen Erstellungsvorgang aufgerufen wird, der STATUS_REPARSE zurückgegeben wurde, 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 FILE_OPEN_REPARSE_POINT Flag im E/A-Parameterblock der Rückrufdatenstruktur fest.

  2. Rufen Sie FltSetCallbackDataDirtyauf.

  3. Rufen Sie FltReissueSynchronousIo auf, um die Erstellungsanforderung erneut anzufordern.

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

Nur synchronisierte E/A-Vorgänge können neu hergestellt werden. Um dem Treiber die Möglichkeit zu bieten, erneut aufzurufen, indem er FltReissueSynchronousIo in der Postoperation-Rückrufroutine aufruft, muss ein Minifiltertreiber in der Preoperation-Rückrufroutine speziell FLT_PREOP_SYNCHRONIZE zurückgeben.

Anmerkung

Der Minifiltertreiber ruft die FltIsOperationSynchronous Routine nicht auf, um zu bestimmen, ob die Preoperation-Rückrufroutine für diesen Vorgang FLT_PREOP_SYNCHRONIZE zurückgegeben wurde. Der Minifiltertreiber ruft FltIsOperationSynchronous auf, um zu bestimmen, ob der Vorgang selbst synchron aus der Perspektive des E/A-Managers ist.

Es können nur IRP-basierte E/A-Vorgänge erneut bearbeitet werden. Schnelle E/A-Vorgänge und FSFilter-Rückrufvorgänge (File System Filter) können nicht erneut bereitgestellt werden. Um zu bestimmen, ob ein E/A-Vorgang IRP-basiert, verwenden Sie das FLT_IS_IRP_OPERATION Makro.

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

Anmerkung

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 2000 UpdateRollup 1 für SP4; Windows XP SP2
mindestens unterstützte Server- Windows Server 2003 SP1
Zielplattform- Universal
Header- fltkernel.h (include FltKernel.h)
Library FltMgr.lib
DLL- Fltmgr.sys
IRQL- <= APC_LEVEL (Nicht-Paging-E/A kann nur bei PASSIVE_LEVEL neu ausgegeben werden)

Siehe auch

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