IoCreateStreamFileObjectEx2 函式 (ntifs.h)
IoCreateStreamFileObjectEx2 例程會建立新的數據流檔案物件,其中包含目標裝置物件的建立選項。
語法
NTSTATUS IoCreateStreamFileObjectEx2(
[in] PIO_CREATE_STREAM_FILE_OPTIONS CreateOptions,
[in, optional] PFILE_OBJECT FileObject,
[in, optional] PDEVICE_OBJECT DeviceObject,
[out] PFILE_OBJECT *StreamFileObject,
[out, optional] PHANDLE FileHandle
);
參數
[in] CreateOptions
指標 IO_CREATE_STREAM_FILE_OPTIONS 結構,其中包含新數據流檔案物件的建立選項。
[in, optional] FileObject
與新數據流檔案相關的檔案物件的指標。 此參數是選擇性的,可以是 NULL。
[in, optional] DeviceObject
要開啟數據流檔案之裝置物件的指標。 如果呼叫端指定 FileObject 的非 NULL 值, 則會忽略 DeviceObject 的值。 否則,呼叫端必須指定 DeviceObject 的非 NULL 值。
[out] StreamFileObject
要接收數據流檔案物件的裝置物件指標指標。
[out, optional] FileHandle
輸出上數據流之檔案句柄的指標。 此參數是選擇性的,可以是 NULL。
傳回值
IoCreateStreamFileObjectEx2 會傳回新建立數據流檔案物件的指標。
備註
文件系統會呼叫 IoCreateStreamFileObjectEx2 來建立新的數據流檔案物件。 數據流檔案物件與一般檔案物件相同,不同之處在於已設定FO_STREAM_FILE檔案物件旗標。
數據流檔案物件通常用來代表文件系統所掛接之磁碟區的內部數據流。 此 虛擬磁碟區檔案 可讓文件系統檢視、變更和快取磁碟區的內部磁碟結構,就像是一般檔案一樣。 在此情況下,呼叫IoCreateStreamFileObjectEx2中的DeviceObject參數會指定磁碟區的磁碟區裝置物件 (VDO) 。
數據流檔案物件也可以用來代表替代數據流,以存取檔案的元數據,例如擴充屬性或安全性描述元。 在此情況下,呼叫IoCreateStreamFileObjectEx2中的FileObject參數會指定檔案的現有檔案物件。 新建立的數據流檔案對象允許文件系統檢視、變更和快取檔案的元數據,就像是一般檔案一樣。
不再需要數據流檔案物件時,呼叫端必須藉由呼叫 ObDereferenceObject 來遞減其參考計數。 當數據流檔案對象的參考計數達到零時, 會將IRP_MJ_CLOSE 要求傳送至磁碟區的檔系統驅動程式堆疊。
文件系統篩選驅動程式寫入器應該注意 IoCreateStreamFileObjectEx2 會導致 IRP_MJ_CLEANUP 要求傳送至磁碟區的文件系統驅動程式堆疊。 由於文件系統通常會建立數據流文件對象作為 IRP_MJ_CREATE以外的作業副作用,因此篩選驅動程式很難可靠地偵測串流檔案物件建立。 因此,篩選驅動程式應該會收到先前未看到檔案物件的IRP_MJ_CLEANUP 和 IRP_MJ_CLOSE 要求。
如果集區配置失敗, IoCreateStreamFileObjectEx2 會引發 STATUS_INSUFFICIENT_RESOURCES 例外狀況。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8 |
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE |