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_CLEANUPIRP_MJ_CLOSE 要求。

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

規格需求

需求
最低支援的用戶端 Windows 8
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE

另請參閱

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateStreamFileObject

IoCreateStreamFileObjectEx

IoCreateStreamFileObjectLite

ObDereferenceObject