FltCreateNamedPipeFile 関数 (fltkernel.h)
ミニフィルター ドライバー FltCreateNamedPipeFile を呼び出して、新しいパイプを作成するか、既存のパイプを開きます。
構文
NTSTATUS FLTAPI FltCreateNamedPipeFile(
[in] PFLT_FILTER Filter,
[in, optional] PFLT_INSTANCE Instance,
[out] PHANDLE FileHandle,
[out, optional] PFILE_OBJECT *FileObject,
[in] ULONG DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG ShareAccess,
[in] ULONG CreateDisposition,
[in] ULONG CreateOptions,
[in] ULONG NamedPipeType,
[in] ULONG ReadMode,
[in] ULONG CompletionMode,
[in] ULONG MaximumInstances,
ULONG InboundQuota,
ULONG OutboundQuota,
[in, optional] PLARGE_INTEGER DefaultTimeout,
[in, optional] PIO_DRIVER_CREATE_CONTEXT DriverContext
);
パラメーター
[in] Filter
呼び出し元の不透明なフィルター ポインター。
[in, optional] Instance
作成要求の送信先となるミニフィルター ドライバー インスタンスの不透明なインスタンス ポインター。 名前付きパイプ ファイル システムのボリュームにインスタンスをアタッチする必要があります。 このパラメーターは省略可能であり、NULL できます。 このパラメーターが NULL 場合、要求はボリュームのファイル システム ドライバー スタックの上部にあるデバイス オブジェクトに送信されます。 NULL以外の場合、要求は、指定されたインスタンスの下にアタッチされているミニフィルター ドライバー インスタンスにのみ送信されます。
[out] FileHandle
FltCreateNamedPipeFile の呼び出しが成功した場合にファイル ハンドル 受け取る呼び出し元によって割り当てられた変数へのポインター。
[out, optional] FileObject
FltCreateNamedPipeFile の呼び出しが成功した場合にファイル オブジェクト ポインター 受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは省略可能であり、NULL できます。
[in] DesiredAccess
呼び出し元がファイルまたはディレクトリに対して必要とするアクセスの種類を指定するフラグのビットマスク。 DesiredAccess フラグ システム定義のセットによって、ファイル オブジェクトに対する次の特定のアクセス権が決まります。
DesiredAccess フラグ | 意味 |
---|---|
FILE_READ_DATA | 名前付きパイプからデータを読み取ることができます。 |
FILE_READ_ATTRIBUTES | FileAttributes フラグを読み取ることができます。 詳細については、FltCreateFileEx2 の FileAttributes パラメーターの有効なフラグ値表を参照してください。 |
READ_CONTROL | アクセス制御リスト (ACL) と、名前付きパイプに関連付けられている所有権情報を読み取ることができます。 |
FILE_WRITE_DATA | 名前付きパイプにデータを書き込むことができます。 |
FILE_WRITE_ATTRIBUTES | FileAttributes フラグを書き込むことができます。 |
FILE_APPEND_DATA | データはファイルに追加できます。 |
WRITE_DAC | 名前付きパイプに関連付けられている随意アクセス制御リスト (DACL) を書き込むことができます。 |
WRITE_OWNER | 名前付きパイプに関連付けられている所有権情報を書き込むことができます。 |
ACCESS_SYSTEM_SECURITY | 呼び出し元は、名前付きパイプの SACL への書き込みアクセス権を持ちます |
同期 | 呼び出し元は、返された FileHandle が Signaled 状態に設定されるのを待機することで、I/O 操作の完了を同期できます。 このフラグは、CreateOptions FILE_SYNCHRONOUS_IO_ALERT または FILE_SYNCHRONOUS_IO_NONALERT フラグが設定されている場合に設定する必要があります。 |
または、ディレクトリを表さないファイル オブジェクトに対して、次の汎用 ACCESS_MASK フラグを 1 つ以上指定することもできます。 (STANDARD_RIGHTS_XXX フラグは、システム オブジェクトにセキュリティを適用するために使用される定義済みのシステム値です)。これらの汎用フラグを、前の表の追加フラグと組み合わせることもできます。
DesiredAccess to File の値 | DesiredAccess フラグ マップ |
---|---|
GENERIC_READ | STANDARD_RIGHTS_READ、FILE_READ_DATA、SYNCHRONIZE。 |
GENERIC_WRITE | STANDARD_RIGHTS_WRITE、FILE_WRITE_DATA、FILE_APPEND_DATA、SYNCHRONIZE。 |
[in] ObjectAttributes
InitializeObjectAttributesで既に初期化されている不透明な OBJECT_ATTRIBUTES 構造体へのポインター。 呼び出し元がシステム プロセス コンテキストで実行されている場合、このパラメーターは NULL できます。 それ以外の場合、呼び出し元は、InitializeObjectAttributesへの呼び出しでOBJ_KERNEL_HANDLE属性を設定する必要があります。 ファイル オブジェクトのこの構造体のメンバーを次の表に示します。
メンバー | 価値 |
---|---|
ULONG Length の | ObjectAttributesが指す構造体に含まれるデータのバイト数。 この値は、少なくとも sizeof(OBJECT_ATTRIBUTES) である必要があります。 |
PUNICODE_STRING ObjectName | 作成または開くパイプの名前を含む UNICODE_STRING 構造体へのポインター。 この名前は、rootDirectory で指定されたディレクトリを基準とするファイルの名前でない限り、完全修飾ファイル指定またはデバイス オブジェクトの名前必要があります。 たとえば、"\Device\NamedPipe\mypipe" や "\??\pipe\mypipe" はどちらも有効なファイル仕様である可能性があります。 (注: "\??" は、Win32 オブジェクト名前空間の名前として "\DosDevices" を置き換えます。"\DosDevices" は引き続き機能しますが、"\??" はオブジェクト マネージャーによってより高速に変換されます)。 |
HANDLE RootDirectory | FltCreateFileEx2 の前の呼び出しによって取得ディレクトリへの省略可能なハンドル。 この値が NULL 場合、ObjectNameメンバーは、ターゲット パイプへの完全パスを含む完全修飾ファイル指定である必要があります。 この値が NULL以外の場合、ObjectName メンバーは、このディレクトリを基準とするパイプ名を指定します。 |
PSECURITY_DESCRIPTOR SecurityDescriptor | パイプに適用するオプションのセキュリティ記述子 (SECURITY_DESCRIPTOR)。 このようなセキュリティ記述子で指定 ACL は、作成時にのみパイプに適用されます。 パイプの作成時に値が null 場合、パイプに配置される ACL は名前付きパイプ ファイル システムに依存し、任意のアクセス権を持つクライアントがインスタンスを作成できる場合があります。 |
ULONG 属性 を する | ファイル オブジェクト属性を制御するフラグのセット。 呼び出し元がシステム プロセス コンテキストで実行されている場合、このパラメーターは 0 にすることができます。 それ以外の場合、呼び出し元は OBJ_KERNEL_HANDLE フラグを設定する必要があります。 呼び出し元は必要に応じて、OBJ_CASE_INSENSITIVE フラグを設定することもできます。これは、完全一致検索を実行するのではなく、名前参照コード ObjectName の大文字と小文字を無視する必要があることを示します。 |
[out] IoStatusBlock
最終的な完了状態と要求された操作に関する情報を受け取る IO_STATUS_BLOCK 構造体へのポインター。 FltCreateNamedPipeFile から返されると、変数の Information メンバーには、次のいずれかの値が含まれます。
FILE_CREATED
FILE_OPENED
[in] ShareAccess
呼び出し元が必要とするファイルへの共有アクセスの種類を、次のフラグの 1 つまたは組み合わせとして指定します。 共有違反エラーを回避する可能性が最も高い場合は、次のすべての共有アクセス フラグを指定します。
ShareAccess フラグの | 意味 |
---|---|
FILE_SHARE_READ | このファイルは、FltCreateNamedPipeFile への他のスレッドの呼び出し読み取りアクセスのために開くことができます。 |
FILE_SHARE_WRITE | ファイルは、FltCreateNamedPipeFile への他のスレッドの呼び出し書き込みアクセスのために開くことができます。 |
[in] CreateDisposition
ファイルが既に存在するかどうかに応じて、実行するアクションを決定する値。 値には、次の表に示す値のいずれかを指定できます。
CreateDisposition 値の | 意味 |
---|---|
FILE_CREATE | ファイルが既に存在する場合は、要求を失敗させ、指定したファイルを作成または開かないでください。 そうでない場合は、ファイルを作成します。 |
FILE_OPEN | ファイルが既に存在する場合は、新しいファイルを作成する代わりに開きます。 そうでない場合は、要求を失敗させ、新しいファイルを作成しません。 |
FILE_OPEN_IF | ファイルが既に存在する場合は、ファイルを開きます。 そうでない場合は、ファイルを作成します。 |
[in] CreateOptions
次のフラグの互換性のある組み合わせとして、パイプを作成または開くときに適用するオプション。
CreateOptions フラグの | 意味 |
---|---|
FILE_WRITE_THROUGH | パイプにデータを書き込むシステム サービス、パイプ システム、ドライバーは、要求された書き込み操作が完了したと見なされる前に、実際にデータをパイプに転送する必要があります。 このフラグは、CreateOptions フラグ FILE_NO_INTERMEDIATE_BUFFERINGが設定されている場合に自動的に設定されます。 |
FILE_SYNCHRONOUS_IO_ALERT | パイプに対するすべての操作は同期的に実行されます。 呼び出し元に代わって待機すると、アラートが早期に終了する可能性があります。 また、このフラグにより、I/O システムはパイプ位置コンテキストを維持します。 このフラグを設定する場合は、I/O マネージャーが同期オブジェクトとしてファイル オブジェクトを使用するように、DesiredAccess SYNCHRONIZE フラグも設定する必要があります。 |
FILE_SYNCHRONOUS_IO_NONALERT | パイプに対するすべての操作は同期的に実行されます。 システムで I/O キューの同期を待機し、完了はアラートの対象になりません。 また、このフラグにより、I/O システムはファイル位置コンテキストを維持します。 このフラグを設定する場合は、I/O マネージャーが同期オブジェクトとしてファイル オブジェクトを使用するように、DesiredAccess SYNCHRONIZE フラグも設定する必要があります。 |
[in] NamedPipeType
作成する名前付きパイプの種類。 次のいずれかの値を指定できます。
価値 | 意味 |
---|---|
|
データは、バイト ストリームとしてパイプに書き込まれます。 この型を使用するには、readMode FILE_PIPE_MESSAGE_MODEすることはできません。 |
|
データはメッセージとしてパイプに書き込まれます。 |
[in] ReadMode
パイプから読み取るモード。
価値 | 意味 |
---|---|
|
パイプ データはバイト ストリームとして読み取られます。 |
|
パイプ データはメッセージとして読み取られます。 このモードを使用するには、NamedPipeType FILE_PIPE_MESSAGE_TYPEする必要があります。 |
[in] CompletionMode
パイプの読み取りと書き込みの完了モード。
価値 | 意味 |
---|---|
|
パイプの読み取り要求と書き込み要求はキューに登録され、完了するまでブロックできます。 |
|
パイプの読み取り要求と書き込み要求は直ちに完了します。 |
[in] MaximumInstances
この名前付きパイプに許可されるインスタンスの最大数。
InboundQuota
入力バッファー用に予約するバイト数。
OutboundQuota
出力バッファー用に予約するバイト数。
[in, optional] DefaultTimeout
100 ナノ秒単位の既定のタイムアウト。 この値は負の整数で表されます。 たとえば、250 ミリ秒は –10 * 1000 * 250 として指定されます。
[in, optional] DriverContext
IoInitializeDriverCreateContextによって既に初期化されている IO_DRIVER_CREATE_CONTEXT 構造体への省略可能なポインター。
戻り値
FltCreateNamedPipeFile 、STATUS_SUCCESSまたは次のような適切な NTSTATUS 値を返します。
リターン コード | 形容 |
---|---|
|
Filter または Instance パラメーターで指定されたフィルターまたはインスタンスが取り壊されています。 この状態コードは、開いている要求がボリューム マウント ポイントを超え、インスタンス パラメーターが nullでない場合に受信できます。 これはエラー コードです。 |
|
ObjectAttributes パラメーターに RootDirectory メンバーが含まれていませんでしたが、OBJECT_ATTRIBUTES構造体の ObjectName メンバーが空の文字列であるか、OBJECT_NAME_PATH_SEPARATOR文字が含まれていませんでした。 このエラー コードは、オブジェクト パスの構文が正しく示されていません。 |
備考
FltCreateNamedPipeFile 関数を使用すると、ミニフィルター ドライバーでパイプ インスタンスを作成または開くことができます。 これは、仮想パイプを作成する場合や、I/O を多重化するためのパイプ共用体を作成する場合に便利です。
インスタンス パラメーターは、NULL するか、名前付きパイプ ボリュームにアタッチして以前に設定します。 ボリューム ポインターを取得するには、FltGetVolumeFromName にボリューム名として "\Device\NamedPipe"渡します。
作成操作の一部として追加の作成パラメーター (ECP) を指定するには、FltAllocateExtraCreateParameterList ルーチンを使用して、IO_DRIVER_CREATE_CONTEXT 構造体の ExtraCreateParameter メンバーを初期化します。 ECP を使用する場合は、関連付けられているサポート ルーチンを使用して、割り当て、初期化、解放する必要があります。 FltCreateNamedPipeFile 呼び出しから戻ると、ECP リストは変更されず、他の作成操作のために FltCreateNamedPipeFile 追加の呼び出しに渡すことができます。 ECP リスト構造は自動的に割り当て解除されません。 FltCreateNamedPipeFile の呼び出し元は、FltFreeExtraCreateParameterList ルーチンを呼び出すことによって、この構造体の割り当てを解除する必要があります。
インスタンス が NULL されていない場合、FltCreateNamedPipeFile からの作成要求は、指定されたミニフィルター ドライバー インスタンスの下にアタッチされたインスタンスと名前付きパイプ ファイル システムにのみ送信されます。 指定されたインスタンスとその上にアタッチされたインスタンスは、作成要求を受け取りません。 インスタンスが指定されていない場合、要求はスタックの一番上に送信され、すべてのインスタンスと名前付きパイプ ファイル システムによって受信されます。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (FltKernel.h を含む) |
ライブラリ | Fltmgr.lib |
IRQL | PASSIVE_LEVEL |
関連項目
FltAllocateExtraCreateParameterList の
FltFreeExtraCreateParameterList を する
InitializeObjectAttributes の
IoInitializeDriverCreateContext の