FltReissueSynchronousIo 函式 (fltkernel.h)
FltReissueSynchronousIo 會起始新的同步 I/O 作業,該作業會使用先前同步 I/O 作業的參數。
語法
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
參數
[in] InitiatingInstance
重新發出 I/O 作業之迷你篩選驅動程序實例的不透明實例指標。 必須是起始先前 I/O 作業的相同實例。 此參數是必要的,而且無法設定為 NULL。
[in] CallbackData
回呼數據的指標 (FLT_CALLBACK_DATA 先前同步處理的 I/O 作業) 結構。 此參數是必要的,而且無法設定為 NULL。
傳回值
無
備註
迷你篩選驅動程式會從後置回呼呼叫 FltReissueSynchronousIo (PFLT_POST_OPERATION_CALLBACK) 例程,以重新發出同步處理的 I/O 要求。 它通常會從後置回呼例程呼叫 FltReissueSynchronousIo ,以使用不同的參數重新發出失敗的作業,或處理重新分析退回。 不過,它也可以呼叫 FltReissueSynchronousIo ,以重新發出小型篩選驅動程式透過呼叫 FltAllocateCallbackData 和 FltPerformSynchronousIo 例程所產生的 I/O。 在此情況下,不論是在後置回呼例程中呼叫 FltReissueSynchronousIo,還是是在作業回呼例程的內容之外呼叫 FltReissueSynchronousIo 都無關。 針對在後置回呼例程內容外呼叫,請考慮改用 FltReuseCallbackData 和 FltPerformSynchronousIo 例程。
呼叫端可以在重新發出 I/O 要求之前,先修改回呼數據 (FLT_CALLBACK_DATA) 結構的 I/O 參數區塊內容。 如果是,它必須先呼叫 FltSetCallbackDataDirty ,再呼叫 FltReissueSynchronousIo。
例如,如果迷你篩選驅動程式使用重新剖析點,而且其建立後回呼例程會針對傳回STATUS_REPARSE的建立作業呼叫,迷你篩選驅動程式就可以重新發出建立作業以取得自己的重新剖析點。 在此情況下,迷你篩選驅動程式將會完成下列步驟:
在回呼數據結構的 I/O 參數區塊中設定FILE_OPEN_REPARSE_POINT旗標。
呼叫 FltReissueSynchronousIo 以重新發出建立要求。
篩選管理員只會將重新發出 I/O 要求傳送至附加在起始實例下方的迷你篩選驅動程序實例, (在 InitiatingInstance 參數中指定的) 和文件系統。 附加在起始實例上方的迷你篩選驅動程序實例不會收到重新發出 I/O 要求。
只能重新發出同步處理的 I/O 作業。 若要讓驅動程式能夠重新發出,在後置回呼例程中呼叫 FltReissueSynchronousIo ,迷你篩選驅動程式必須特別傳回預先操作回呼例程中的FLT_PREOP_SYNCHRONIZE。
注意
迷你篩選驅動程式不會呼叫 FltIsOperationSynchronous 例程,以判斷此作業的預先操作回呼例程是否傳回FLT_PREOP_SYNCHRONIZE。 迷你篩選驅動程式會呼叫 FltIsOperationSynchronous ,以判斷作業本身是否從 I/O 管理員的觀點同步。
只能重新發出 IRP 型 I/O 作業。 無法重新發出快速 I/O 作業和文件系統篩選 (FSFilter) 回呼作業。 若要判斷 I/O 作業是否以 IRP 為基礎,請使用 FLT_IS_IRP_OPERATION 宏。
無法重新發出已取消的建立 (IRP_MJ_CREATE) 作業。 呼叫 FltReissueSynchronousIo 進行建立作業之前,呼叫端應該檢查檔案物件的 Flags 成員以進行建立作業。 如果已設定FO_FILE_OPEN_CANCELLED旗標,這表示已取消建立作業,而且會為此檔案對象發出關閉 (IRP_MJ_CLOSE) 作業。 如果針對已取消的建立作業呼叫 FltReissueSynchronousIo ,篩選管理員會失敗重新發出 I/O 要求,並STATUS_CANCELLED。
注意
當迷你篩選驅動程式在建立後回呼中重新發出建立時,他們不需要釋放並設定與 CallbackData 中標籤Data 字段 (TagData 欄位相關聯的緩衝區,) 為 NULL。 相反地,篩選管理員會釋出並將緩衝區設定為NULL。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | SP4 的 Windows 2000 更新匯總 1;Windows XP SP2 |
最低支援的伺服器 | Windows Server 2003 SP1 |
目標平台 | Universal |
標頭 | fltkernel.h (包含 FltKernel.h) |
程式庫 | FltMgr.lib |
Dll | Fltmgr.sys |
IRQL | <= APC_LEVEL (非分页 IO 只能在PASSIVE_LEVEL) 重新发出 |