FsRtlChangeBackingFileObject 函式 (ntifs.h)
FsRtlChangeBackingFileObject 例程會將目前的檔案物件取代為新的檔案物件。
語法
NTSTATUS FsRtlChangeBackingFileObject(
PFILE_OBJECT CurrentFileObject,
PFILE_OBJECT NewFileObject,
FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
ULONG Flags
);
參數
CurrentFileObject
[in, 選擇性] 目前的檔案物件。 如果 CurrentFileObjectNULL,則操作系統目前的檔案物件會設定為 NewFileObject。 如果不是 NULL,則只有在 OS 目前的備份檔物件等於此值時,備份文件物件才會變更為 NewFileObject。 如果這個檔案物件不屬於數據流,作業就會失敗。
NewFileObject
[in] OS 將在內部參考並儲存的新檔案物件。
ChangeBackingType
[in]FSRTL_CHANGE_BACKING_TYPE 列舉值,指出應該變更哪些內部結構來參考 NewFileObject 。
Flags
[in] 保留供日後使用。
傳回值
如果作業成功,FsRtlChangeBackingFileObject 例程會傳回STATUS_SUCCESS。 否則,FsRtlChangeBackingFileObject 會傳回適當的錯誤碼。下表包含 FsRtlChangeBackingFileObject 可能會傳回的錯誤碼。
傳回碼 | 描述 |
---|---|
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 開始使用。 |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | PowerIrpDDis(wdm) |