次の方法で共有


名前付きパイプ開きモード

パイプ サーバーは、CreateNamedPipe 関数の dwOpenMode パラメーターで、パイプ アクセス、重複、および書き込みモードを指定します。 パイプ クライアントは、CreateFile 関数を使用して、パイプ ハンドルに対してこれらの開いているモードを指定できます。

アクセス モード

パイプ アクセス モードの設定は、パイプ サーバーのハンドルに関連付けられている読み取りまたは書き込みアクセスを指定することと同じです。 次の表は、CreateNamedPipeで指定できるアクセス モードごとに同等汎用アクセス権を示しています。

アクセス モード 同等の汎用アクセス権
PIPE_ACCESS_INBOUND GENERIC_READ
PIPE_ACCESS_OUTBOUND GENERIC_WRITE
PIPE_ACCESS_DUPLEX GENERIC_READ |GENERIC_WRITE

 

パイプ サーバーがPIPE_ACCESS_INBOUNDを使用してパイプを作成する場合、パイプ サーバーのパイプは読み取り専用で、パイプ クライアントの場合は書き込み専用です。 パイプ サーバーがPIPE_ACCESS_OUTBOUNDを使用してパイプを作成する場合、パイプはパイプ サーバーに対して書き込み専用になり、パイプ クライアントの場合は読み取り専用になります。 PIPE_ACCESS_DUPLEXで作成されたパイプは、パイプ サーバーとパイプ クライアントの両方に対して読み取り/書き込みが行われます。

CreateFile を使用して名前付きパイプに接続するパイプ クライアントは、パイプ サーバーで指定されたアクセス モードと互換性のあるアクセス権を dwDesiredAccess パラメーターで指定する必要があります。 たとえば、クライアントは、PIPE_ACCESS_OUTBOUNDを使用してパイプ サーバーが作成したパイプのハンドルを開くGENERIC_READアクセスを指定する必要があります。 アクセス モードは、パイプのすべてのインスタンスで同じである必要があります。

読み取りモードやブロッキング モードなどのパイプ属性を読み取るには、パイプ ハンドルにFILE_READ_ATTRIBUTESアクセス権が必要です。パイプ属性を書き込むには、パイプ ハンドルにFILE_WRITE_ATTRIBUTESアクセス権が必要です。 これらのアクセス権は、パイプに適した汎用アクセス権と組み合わせることができます。読み取り専用パイプのFILE_WRITE_ATTRIBUTESを使用したGENERIC_READ、または書き込み専用パイプのFILE_READ_ATTRIBUTESを使用したGENERIC_WRITE。 この方法でアクセス権を制限すると、パイプのセキュリティが向上します。

重なりモード

重複モードでは、長い読み取り、書き込み、接続操作を実行する関数は、すぐに戻ることができます。 これにより、時間のかかる操作がバックグラウンドで実行されている間、スレッドは他の操作を実行できます。 重複モードを指定するには、FILE_FLAG_OVERLAPPED フラグを使用します。 詳細については、「同期および重複入力と出力の」を参照してください。

CreateFile 関数を使用すると、パイプ クライアントは、dwFlagsAndAttributes パラメーターを使用して、パイプ ハンドルの重複モード (FILE_FLAG_OVERLAPPED) を設定できます。

Write-Through モード

FILE_FLAG_WRITE_THROUGHでライトスルー モードを指定します。 このモードは、パイプ クライアントと異なるコンピューター上のパイプ サーバー間のバイト型パイプへの書き込み操作にのみ影響します。 ライトスルー モードでは、名前付きパイプに書き込む関数は、データがネットワーク経由でリモート コンピューター上のパイプのバッファーに送信されるまで戻りません。 ライトスルー モードは、すべての書き込み操作に同期を必要とするアプリケーションに役立ちます。

ライトスルー モードが有効になっていない場合、最小バイト数が累積されるまで、または最大期間が経過するまでデータをバッファリングすることで、システムはネットワーク操作の効率を向上させます。 バッファリングにより、システムは複数の書き込み操作を 1 つのネットワーク伝送に結合できます。 つまり、書き込み操作は、システムが送信バッファーにデータを入れた後、システムがネットワーク経由で送信する前に正常に完了できることを意味します。

CreateFile 関数を使用すると、パイプ クライアントは、dwFlagsAndAttributes パラメーターを使用して、パイプ ハンドルの書き込みスルー モード (FILE_FLAG_WRITE_THROUGH) を設定できます。 パイプ ハンドルの書き込みモードは、パイプ ハンドルが作成された後は変更できません。 書き込みスルー モードは、同じパイプ インスタンスに対するサーバー ハンドルとクライアント ハンドルで異なる場合があります。

パイプ クライアントは、SetNamedPipeHandleState 関数を使用して、書き込みモードが無効になっているパイプの送信前のバイト数とタイムアウト期間を制御できます。 読み取り専用パイプの場合は、GENERIC_READとFILE_WRITE_ATTRIBUTESアクセス権を使用してパイプ ハンドルを開く必要があります。