共用方式為


修改 I/O 作業的參數

迷你篩選驅動程式可以修改 I/O 作業的參數。 例如,迷你篩選驅動程式的 預先操作回呼常式 可以藉由變更作業的目標實例,將 I/O 作業重新導向至不同的磁片區。 新的目標實例必須是位於另一個磁片區上相同高度之相同迷你篩選器驅動程式的實例。

I/O 作業的參數可在回呼資料 (FLT_CALLBACK_DATA) 結構和 I/O 參數區塊 (FLT_IO_PARAMETER_BLOCK) 結構中找到。 迷你篩選驅動程式 的預先操作回呼常式 和後續操作回呼 常式 會接收 資料 輸入參數中作業之回呼資料結構的指標。 回呼資料結構的 Iopb 成員是 I/O 參數區塊結構的指標,其中包含作業的參數。

如果迷你篩選驅動程式的預先操作回呼常式修改 I/O 作業的參數,則迷你篩選驅動程式在迷你篩選驅動程式實例堆疊下方的所有迷你篩選驅動程式都會在其預先操作和後置回呼常式中收到修改的參數。

目前迷你篩選驅動程式的後置回呼常式或迷你篩選驅動程式在迷你篩選驅動程式實例堆疊中,上述任何迷你篩選驅動程式都不會收到修改的參數。 在所有情況下,迷你篩選驅動程式的預先操作和後續操作回呼常式都會針對指定的 I/O 作業接收相同的輸入參數值。

修改 I/O 作業的參數之後,預先操作或後置回呼常式必須透過呼叫 FltSetCallbackDataDirty來指出它已完成,除非它已變更回呼資料結構 IoStatus 欄位的內容。 否則,篩選管理員會忽略參數值的任何變更。 FltSetCallbackDataDirty 會在 I/O 作業的回呼資料結構中設定FLTFL_CALLBACK_DATA_DIRTY旗標。 Minifilter 驅動程式可以呼叫 FltIsCallbackDataDirty 來測試此旗標,或藉由呼叫 FltClearCallbackDataDirty加以清除。

如果迷你篩選驅動程式的預先操作回呼常式修改 I/O 作業的參數,則迷你篩選驅動程式在迷你篩選驅動程式實例堆疊下方的所有迷你篩選驅動程式都會收到 DataFltObjects 輸入參數中修改過的參數,使其預先操作和後置回呼常式。 (Minifilter 驅動程式無法直接修改FltObjects參數所指向之FLT_RELATED_OBJECTS結構的內容。不過,如果迷你篩選驅動程式修改 I/O 作業的目標實例或目標檔案物件,篩選管理員會修改傳遞至較低迷你篩選驅動程式之FLT_RELATED_OBJECTS結構之對應InstanceFileObject成員的值。)

雖然迷你篩選驅動程式預先操作回呼常式所做的任何參數變更都不會由迷你篩選驅動程式自己的後置回呼常式接收,但預先操作回呼常式能夠將已變更參數的相關資訊傳遞至迷你篩選驅動程式自己的後置回呼常式。 如果預先操作回呼常式透過傳回FLT_PREOP_SUCCESS_WITH_CALLBACK或FLT_PREOP_SYNCHRONIZE,將 I/O 作業傳遞給堆疊,它可以將已變更參數值的相關資訊儲存到 CompletionCoNtext 輸出參數所指向的迷你篩選驅動程式定義結構中。 篩選管理員會將 CompletionCoNtext 輸入參數中的這個結構指標傳遞至後置回呼常式。

如需 I/O 作業參數的詳細資訊,請參閱 FLT_CALLBACK_DATAFLT_IO_PARAMETER_BLOCK