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:
Legen Sie das FILE_OPEN_REPARSE_POINT Flag im E/A-Parameterblock der Rückrufdatenstruktur fest.
Rufen Sie FltSetCallbackDataDirtyauf.
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) |