IoCreateStreamFileObject 函式 (ntifs.h)

IoCreateStreamFileObject 例程會建立新的數據流檔案物件。

語法

PFILE_OBJECT IoCreateStreamFileObject(
  [in, optional] PFILE_OBJECT   FileObject,
  [in, optional] PDEVICE_OBJECT DeviceObject
);

參數

[in, optional] FileObject

新數據流檔案相關之檔案物件的指標。 這個參數是選擇性的,而且可以是 NULL

[in, optional] DeviceObject

要開啟數據流檔案之裝置物件的裝置物件指標。 如果呼叫端指定 FileObject 的非 NULL 值,則會忽略 DeviceObject 的值。 否則,呼叫端必須為 DeviceObject 指定非 NULL 值。

傳回值

IoCreateStreamFileObject 會傳回新建立之數據流檔案物件的指標。

備註

文件系統會呼叫 IoCreateStreamFileObject 來建立新的數據流檔案物件。 數據流文件物件與一般檔案物件相同,不同之處在於已設定FO_STREAM_FILE檔案物件旗標。

數據流檔案物件通常用來代表文件系統所掛接之磁碟區的內部數據流。 此 虛擬磁碟區檔案 允許檔系統檢視、變更和快取磁碟區磁碟上的結構,就像是一般檔案一樣。 在此情況下,呼叫 IoCreateStreamFileObject 中的 DeviceObject 參數會指定磁碟區的磁碟區裝置物件 (VDO) 。

數據流檔案物件也可以用來代表替代數據流,以存取檔案的元數據,例如擴充屬性或安全性描述項。 在此情況下,呼叫IoCreateStreamFileObject中的FileObject參數會指定檔案的現有檔案物件。 新建立的數據流檔案對象允許文件系統檢視、變更和快取檔案的元數據,就像是一般檔案一樣。

不再需要數據流檔案物件時,呼叫端必須藉由呼叫 ObDereferenceObject 來遞減其參考計數。 當數據流檔案對象的參考計數達到零時,會將IRP_MJ_CLOSE要求傳送至磁碟區的檔系統驅動程式堆疊。

檔系統篩選驅動程式寫入器應該注意 IoCreateStreamFileObject 會導致IRP_MJ_CLEANUP要求傳送至磁碟區的文件系統驅動程式堆疊。 由於文件系統通常會建立數據流文件物件做為IRP_MJ_CREATE以外作業的副作用,因此篩選驅動程式很難可靠地偵測串流檔案物件的建立。 因此,篩選驅動程式應該會收到先前未看到之檔案物件的IRP_MJ_CLEANUP和IRP_MJ_CLOSE要求。

如果發生集區配置失敗, IoCreateStreamFileObject 會引發STATUS_INSUFFICIENT_RESOURCES例外狀況。

規格需求

需求
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

另請參閱

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateStreamFileObjectEx

IoCreateStreamFileObjectLite

ObDereferenceObject