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 要求。
當它偵測到檔案或目錄已重新命名時。
關閉檔案數據流時,文件系統會負責確保移除和釋放與該數據流相關聯的所有每個數據流內容。 若要這樣做,文件系統必須在檔案控制區塊 (FCB) 或其他數據流內容對象上呼叫 FsRtlTeardownPerStreamContexts。 FsRtlTeardownPerStreamContexts 會逐步解說 FilterContexts 清單,移除每個專案並呼叫其 FreeCallback 例程。
因此,文件系統篩選驅動程式不應該從IRP_MJ_CLOSE或IRP_MJ_PNP分派例程內呼叫 FsRtlRemovePerStreamContext。 這類呼叫不僅不必要,也會干擾文件系統對 FsRtlTeardownPerStreamContexts的呼叫。
文件系統篩選驅動程式不應該從每個數據流內容結構的 FreeCallback 例程內呼叫 FsRtlRemovePerStreamContext。 這是因為基礎文件系統在已從 FilterContexts 清單中移除內容結構之後,呼叫 FreeCallback 例程。
若要初始化每個數據流的內容結構,請使用 FsRtlInitPerStreamContext 巨集。
若要將初始化的每個資料流內容結構與檔案資料流產生關聯,請呼叫 FsRtlInsertPerStreamContext。
若要擷取與檔案數據流相關聯的每個數據流內容結構,請呼叫 FsRtlLookupPerStreamContext。
FsRtlRemovePerStreamContext 只能在支援篩選內容的文件系統上使用。
如需詳細資訊,請參閱舊版文件系統篩選驅動程式中的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 SP4 更新匯總;Windows XP |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
另請參閱
FsRtlGetPerStreamContextPointer
FsRtlSupportsPerStreamContexts