<Return[C]><Top>

CreateMailslot

Declare Function Api_CreateMailslot& Lib "kernel32" Alias "CreateMailslotA" (ByVal lpName$, ByVal nMaxMessageSize&, ByVal lReadTimeout&, lpSecurityAttributes As SECURITY_ATTRIBUTES)

Declare Function CreateMailslot Lib "kernel32" Alias "CreateMailslotA" (ByVal lpName As String, ByVal nMaxMessageSize As Long, ByVal lReadTimeout As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long

指定された名前を持つメールスロットを作成し、メールスロットサーバーがそのメールスロットを操作するために利用できるハンドルを返す。メールスロットは、そのメールスロットを作成したコンピュータから見てローカルになる。指定された名前のメールスロットが既に存在している場合は、エラーになる。

パラメータ
lpName
    [入力]メールスロットの名前を指定する、null で終わる文字列へのポインタを指定する。この名前は、次の形式でなければならない。
    \\.\mailslot\[path]name
    name フィールドは一意でなければならない。メールスロット名には、円記号(\)で区切った複数の擬似的なディレクトリを含めることができ

    る。たとえば、「\\.\mailslot\example_mailslot_name」と「\\.\mailslot\abc\def\ghi」は、いずれも有効な名前である(abc など

    のディレクトリ名がファイルシステム内に存在している必要はない)。
nMaxMessageSize
    [入力]メールスロットに書き込める 1 つのメッセージの最大長を、バイト単位で指定する。任意のサイズのメッセージを書き込めることを指

    定したい場合、このパラメータを 0 に設定する。
lReadTimeout
    [入力]メッセージ読み取りのタイムアウト値を、ミリ秒(1,000 分の 1 秒)単位で指定する。次の値には特別な意味がある。

    値                                            

意味                                                                                                                        

    0

メッセージが存在しないときは、即座に制御を返す(この場合、エラーにはならない)。

    MAILSLOT_WAIT_FOREVER

メッセージが送信されるまで待ち続ける。 

    このタイムアウト値は、それ以降のすべての読み取り操作と継承されたすべてのメールスロットハンドルへ適用される。

lpSecurityAttributes
    [入力] 構造体へのポインタを指定する。この構造体の bInheritHandle メンバは、返されたハンドルを子プロセスが継承するかどうかを

    決定する。lpSecurityAttributes が NULL の場合、そのハンドルは継承できない。この構造体の lpSecurityDescriptor メンバは無視さ

    れる。

戻り値
    関数が成功すると、メールスロットのハンドルが返る。このハンドルはサーバーのメールスロット操作に利用できる。ハンドルのサーバー側は

    オーバーラップ( 重なり合う)する。
    関数が失敗すると、INVALID_HANDLE_VALUE が返る。拡張エラー情報を取得するには、 関数を使う。

解説
    次の条件のいずれかが成立するまでは、メールスロットは存続する。
    •CloseHandle 関数を使って、メールスロットへの最後のハンドル( おそらく継承されたハンドルまたは重複ハンドル)を閉じる。
    •最後のハンドル( おそらく継承されたハンドルまたは重複ハンドル)を所有するプロセスが終了する。
    システムは 2 番目の方法を使ってメールスロットを破棄する。
    メールスロットにメッセージを書き込むには、次の形式のいずれかでメールスロット名を指定し、 関数を呼び出す。

    形式                                             

使用法                                                                                           

    \\.\mailslot\name

ローカルメールスロットのクライアントハンドルを取得する。

    \\computername\mailslot\name

リモートメールスロットのクライアントハンドルを取得する。

    \\domainname\mailslot\name

 

指定したドメイン内にある、指定した名前を持つすべてのメールスロットに対するクライアントハンドルを取得する。

    \\*\mailslot\name

 

システムのプライマリドメイン内にある、指定した名前を持つすべてのメールスロットに対するクライアントハンドルを取得する。

    CreateFile でドメインを指定するか、アスタリスク形式を使ってシステムのプライマリドメインを指定した場合、アプリケーションはメールスロット

    に対して一度に 424 バイトを超える書き込みを行えない。424 バイトを超える書き込みを行おうとすると、WriteFile 関数は失敗し、 関数は

    ERROR_BAD_NETPATH を返す。
    CreateFile 関数を使ってメールスロットのハンドルを取得するときは、FILE_SHARE_READ フラグを指定しなければならない。