FsRtlChangeBackingFileObject 函式 (ntifs.h)
FsRtlChangeBackingFileObject 例程會將目前的檔案物件取代為新的檔案物件。
語法
NTSTATUS FsRtlChangeBackingFileObject(
PFILE_OBJECT CurrentFileObject,
PFILE_OBJECT NewFileObject,
FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
ULONG Flags
);
參數
CurrentFileObject
[in, 選擇性] 目前的檔案物件。 如果 CurrentFileObject 為 NULL,操作系統的目前檔案物件會設定為 NewFileObject。 如果是非 NULL,只有當 OS 的目前備份檔物件等於此值時,備份檔物件才會變更為 NewFileObject 。 如果這個檔案物件不屬於數據流,作業就會失敗。
NewFileObject
[in] OS 將在內部參考及儲存的新檔案物件。
ChangeBackingType
[in]FSRTL_CHANGE_BACKING_TYPE列舉值,指出應該變更哪些內部結構以參考 NewFileObject。
Flags
[in] 保留供日後使用。
傳回值
如果作業成功, FsRtlChangeBackingFileObject 例程會傳回STATUS_SUCCESS。 否則, FsRtlChangeBackingFileObject 會傳回適當的錯誤碼。下表包含 FsRtlChangeBackingFileObject 可能會傳回的錯誤碼。
傳回碼 | Description |
---|---|
STATUS_INVALID_PARAMETER_2 | 變更作業失敗,因為 NewFileObject 指定的檔案物件不代表與 CurrentFileObject 相同的數據流。 |
STATUS_INVALID_PARAMETER_3 | 變更作業失敗,因為呼叫端在 ChangeBackingType 中指定了無效的支持類型。 |
STATUS_INVALID_PARAMETER_4 | 變更作業失敗,因為呼叫端在 Flags 中指定了無效的值。 |
STATUS_NOT_SUPPORTED | 變更作業失敗,因為呼叫端以不允許後續交換檔案物件的方式取得檔案物件。 例如,如果呼叫端取得具有 CcGetFileObjectFromSectionPtrs 呼叫的檔案物件,則交換檔案物件並不安全。 |
備註
FsRtlChangeBackingFileObject 例程會變更下列其中一項的檔案物件:
其中一個記憶體管理員的數據流映像控制區域
數據流的記憶體管理員數據控制區域
數據流的快取管理員共用快取對應
FsRtlChangeBackingFileObject 例程不是同步的。 它會處理變更檔案物件的要求,並立即傳回。 快取管理員和記憶體管理員會同步處理檔案對象的變更,而且在與舊檔案對象相關聯的所有未完成作業完成之前,都不會釋放舊的檔案物件。 FsRtlChangeBackingFileObject 中STATUS_SUCCESS的傳回狀態並不表示操作系統已經變更檔案物件。
不過, 在 FsRtlChangeBackingFileObject 成功執行之後,操作系統會將所有未來的作業與新的檔案對象產生關聯。
若要變更多個支援類型的檔案物件,呼叫端必須多次呼叫 FsRtlChangeBackingFileObject ,每個支援類型一次才能變更。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | FsRtlChangeBackingFileObject 例程可從 Windows Vista 開始提供。 |
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | PowerIrpDDis (wdm) |