ConnectNamedPipe

https://msdn.microsoft.com/ja-jp/library/cc429198.aspx https://msdn.microsoft.com/ja-jp/library/ms684342.aspx https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/ms684342.aspx https://msdn.microsoft.com/ja-jp/library/cc429057.aspx https://msdn.microsoft.com/ja-jp/library/ms687069.aspx https://msdn.microsoft.com/ja-jp/library/cc429359.aspx https://msdn.microsoft.com/ja-jp/library/cc429130.aspx https://msdn.microsoft.com/ja-jp/library/cc429057.aspx https://msdn.microsoft.com/ja-jp/library/cc429198.aspx https://msdn.microsoft.com/ja-jp/library/cc429130.aspx https://msdn.microsoft.com/ja-jp/library/cc429359.aspx https://msdn.microsoft.com/ja-jp/library/ms684342.aspx
ここに掲載されている内容は、コンテンツ提供時の情報で、以前は有効であったリンクやURLが現在無効になっている場合や、技術情報が最新の情報と異なる場合がありますのでご了承ください。
最新の情報については、Platform SDK: Interprocess Communications (英語)または、http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp をご覧ください。

名前付きパイプのサーバープロセスにおいて、クライアントプロセスがパイプのインスタンスに接続してくるのを待機します。クライアントプロセスは、 関数または CallNamedPipe 関数によってパイプに接続してきます。

BOOL ConnectNamedPipe(
  HANDLE hNamedPipe,          // handle to named pipe to connect
  LPOVERLAPPED lpOverlapped   // pointer to overlapped structure
);

パラメータ

hNamedPipe
名前付きパイプインスタンスのサーバー端点のハンドルを指定します。このハンドルは、CreateNamedPipe 関数が返します。
lpOverlapped
構造体へのポインタを指定します。

戻り値

関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

hNamedPipe パラメータには、新しく作成したパイプのインスタンスを指定します。以前にほかのクライアントプロセスと接続されていたパイプのインスタンスを指定することもできます。ただし、DisconnectNamedPipe 関数によって接続が解除されていなければなりません。
CreateNamedPipe 関数の動作は、次のモードによって変わります。

  • パイプハンドルの待機モードがブロッキングモードか非ブロッキングモード

  • lpOverlapped パラメータで同期モードが指定されたか非同期モードが指定されたか

パイプハンドルの待機モードは、CreateNamedPipe 関数または SetNamedPipeHandleState 関数で設定します。ただし、非ブロッキングモードは、マイクロソフト LAN マネージャ 2.0 との互換性のためにサポートされているモードです。名前付きパイプで非同期入出力を行うために使うことは避けてください。
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持つときに、lpOverlapped パラメータに NULL を指定すると、この関数は、接続操作が完了したと間違って通知することがあります。FILE_FLAG_OVERLAPPED フラグを持つときは、NULL を指定しないでください。
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持つとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、lpOverlapped パラメータが指す 構造体に手動リセットイベントオブジェクトのハンドルを入れておかなければなりません。手動リセットイベントオブジェクトは、 関数で作成できます。
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで NULL を指定したときは、この関数は、クライアント側が接続されるまで (あるいはエラーが発生するまで) 制御を返しません。次の順に関数が呼び出されると、ConnectNamedPipe 関数は 0 を返しますが、クライアントサーバー間は接続されています。GetLastError 関数は ERROR_PIPE_CONNECTED を返します。
サーバープロセスが CreateNamedPipe 関数でパイプのインスタンスを作成した

その後、クライアントプロセスが CreateFile 関数などでパイプのインスタンスに接続した

その後、サーバープロセスが ConnectNamedPipe 関数を呼び出した

hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。
OVERLAPPED 構造体で指定したイベントオブジェクトは、ConnectNamedPipe 関数が制御を返す前に非シグナル状態に設定され、クライアント側が接続されるとシグナル状態になります。
サーバープロセスは、各種 (WaitForSingleObject 関数など) や、 関数を使って、イベントオブジェクトがシグナル状態になるかどうかを調べることができます。また、 関数を使って、ConnectNamedPipe 関数の実行結果を取得することができます。

対応情報

  Windows NT: バージョン 3.1 以降
  Windows: 対応していません
  Windows CE: 対応していません
  ヘッダ : winbase.h 内で宣言
  インポート ライブラリ : kernel32.lib を使用

参照

CallNamedPipe, , , CreateNamedPipe, DisconnectNamedPipe, , SetNamedPipeHandleState, ,

表示: