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 可能會傳回的錯誤碼。

傳回碼 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)

另請參閱

FSRTL_CHANGE_BACKING_TYPE