FsRtlRemovePerStreamContext 函式 (ntifs.h)
FsRtlRemovePerStreamContext 會從與檔案數據流相關聯的每個數據流內容清單中移除每個數據流內容結構。
語法
PFSRTL_PER_STREAM_CONTEXT FsRtlRemovePerStreamContext(
[in] PFSRTL_ADVANCED_FCB_HEADER StreamContext,
[in, optional] PVOID OwnerId,
[in, optional] PVOID InstanceId
);
參數
[in] StreamContext
檔案數據流FSRTL_ADVANCED_FCB_HEADER結構的指標。 若要從檔案物件取得此指標,請使用 FsRtlGetPerStreamContextPointer 宏。
[in, optional] OwnerId
用來將內容資訊識別為屬於特定篩選驅動程式。
[in, optional] InstanceId
用來搜尋每個數據流內容的特定實例。 如果未提供,則會移除並傳回篩選驅動程式所擁有的任何內容。
如果未提供 OwnerId 或 InstanceId ,則會移除並傳回任何相關聯的每個數據流內容。
傳回值
FsRtlRemovePerStreamContext 會傳回已移除之每個數據流內容的指標。 如果找不到相符專案,或文件系統不支援篩選內容, FsRtlRemovePerStreamContext 會傳回 NULL。
備註
文件系統篩選驅動程式會呼叫 FsRtlRemovePerStreamContext ,從與檔案數據流相關聯的每個數據流內容清單中移除自己的每個數據流內容結構。
FsRtlRemovePerStreamContext 只會移除找到的第一個相符每個數據流內容結構。 如果有額外的每個數據流內容相符,篩選驅動程式必須視需要呼叫 FsRtlRemovePerStreamContext ,才能全部移除。
只有在篩選驅動程式需要捨棄它與檔案數據流相關聯的內容資訊時,才應該使用這個例程,同時數據流仍在開啟。 例如,篩選驅動程式可能會在下列情況下呼叫 FsRtlRemovePerStreamContext :
當它收到來自使用者模式應用程式的要求,以停止記錄特定磁碟區上的 I/O 要求時。
當它偵測到檔案或目錄已重新命名時。
關閉檔案數據流時,文件系統會負責確保移除和釋放與該數據流相關聯的所有每個數據流內容。 若要這樣做,文件系統必須在檔控制區塊上呼叫 FsRtlTeardownPerStreamContexts , (FCB) 或其他檔案數據流內容物件。 FsRtlTeardownPerStreamContexts 會逐步執行 FilterContexts 清單,移除每個專案並呼叫其 FreeCallback 例程。
因此,文件系統篩選驅動程式不應該從IRP_MJ_CLOSE或IRP_MJ_PNP分派例程內呼叫 FsRtlRemovePerStreamContext 。 不僅不需要這類呼叫,也會干擾文件系統對 FsRtlTeardownPerStreamContexts 的呼叫。
文件系統篩選驅動程式不應該從每個數據流內容結構的 FreeCallback 例程內呼叫 FsRtlRemovePerStreamContext。 這是因為基礎文件系統在已從 FilterContexts 清單中移除內容結構之後,呼叫 FreeCallback 例程。
若要初始化每個數據流的內容結構,請使用 FsRtlInitPerStreamContext 宏。
若要將初始化的每個數據流內容結構與檔案數據流產生關聯,請呼叫 FsRtlInsertPerStreamContext。
若要擷取與檔案數據流相關聯的個別數據流內容結構,請呼叫 FsRtlLookupPerStreamContext。
FsRtlRemovePerStreamContext 只能在支援篩選內容的文件系統上使用。
如需詳細資訊,請參閱 在舊版文件系統篩選驅動程式中追蹤 Per-Stream 內容。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 SP4 更新匯總;Windowsxp |
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另請參閱
FsRtlGetPerStreamContextPointer
FsRtlSupportsPerStreamContexts