<Return[C]><Top>

ConnectNamedPipe

Declare Function Api_ConnectNamedPipe& Lib "kernel32" Alias "ConnectNamedPipe" (ByVal hNamedPipe&, lpOverlapped As OVERLAPPED)

Declare Function ConnectNamedPipe Lib "kernel32" Alias "ConnectNamedPipe" (ByVal hNamedPipe As Long, lpOverlapped As OVERLAPPED) As Long

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

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

戻り値
    関数が成功すると、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 関数の実行結果を取得することができる。