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 を呼び出して参照カウントを減らす必要があります。 ストリーム ファイル オブジェクトの参照カウントが 0 に達すると、ボリュームのファイル システム ドライバー スタックにIRP_MJ_CLOSE要求が送信されます。
ファイル システム フィルター ドライバーライターは、 IoCreateStreamFileObject によって、ボリュームのファイル システム ドライバー スタックにIRP_MJ_CLEANUP要求が送信されることに注意する必要があります。 ファイル システムは、多くの場合、IRP_MJ_CREATE以外の操作の副作用としてストリーム ファイル オブジェクトを作成するため、フィルター ドライバーがストリーム ファイル オブジェクトの作成を確実に検出することは困難です。 したがって、フィルター ドライバーは、以前に見えないファイル オブジェクトのIRP_MJ_CLEANUPとIRP_MJ_CLOSE要求を受け取る必要があります。
プール割り当てエラーが発生した場合、 IoCreateStreamFileObject はSTATUS_INSUFFICIENT_RESOURCES例外を発生させます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ntifs.h (Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |