CreateMailslotA 関数 (winbase.h)

指定した名前の mailslot を作成し、mailslot サーバーが mailslot で操作を実行するために使用できるハンドルを返します。 mailslot は、それを作成するコンピューターに対してローカルです。 指定した名前の mailslot が既に存在する場合は、エラーが発生します。

構文

HANDLE CreateMailslotA(
  [in]           LPCSTR                lpName,
  [in]           DWORD                 nMaxMessageSize,
  [in]           DWORD                 lReadTimeout,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

パラメーター

[in] lpName

mailslot の名前。 この名前には、次の形式が必要です。

\\.\mailslot\[path]name

名前フィールドは一意である必要があります。 名前には、円記号で区切られた複数レベルの擬似ディレクトリを含めることができます。 たとえば、\\.\mailslot\example_mailslot_name と \\.\mailslot\abc\def\ghi の両方が有効な名前です。

[in] nMaxMessageSize

mailslot に書き込むことができる 1 つのメッセージの最大サイズ (バイト単位)。 メッセージに任意のサイズを指定するには、この値を 0 に設定します。

[in] lReadTimeout

メッセージが mailslot に書き込まれるのを読み取り操作で待機できる時間 。タイムアウトが発生するまでの時間 (ミリ秒単位)。 次の値は特別な意味を持ちます。

意味
0
メッセージが存在しない場合は、すぐにを返します。 (システムは即時戻り値をエラーとして扱いません。
MAILSLOT_WAIT_FOREVER
((DWORD)-1)
メッセージを無期限に待機します。
 

このタイムアウト値は、後続のすべての読み取り操作と、継承されたすべての mailslot ハンドルに適用されます。

[in, optional] lpSecurityAttributes

SECURITY_ATTRIBUTES構造体へのポインター。 構造体の bInheritHandle メンバーは、返されたハンドルを子プロセスによって継承できるかどうかを決定します。 lpSecurityAttributesNULL の場合、ハンドルを継承できません。

戻り値

関数が成功した場合、戻り値は、サーバー mailslot 操作で使用する mailslot へのハンドルです。 この関数によって返されるハンドルが非同期であるか、重複しています。

失敗した場合の戻り値は、INVALID_HANDLE_VALUE です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

mailslot は、次のいずれかの条件が満たされるまで存在します。

  • 最後のハンドル (継承または複製される可能性があります) は、 CloseHandle 関数を使用して閉じられます。
  • 最後の (継承または重複している可能性がある) ハンドルを所有するプロセスは終了します。
システムは、2 番目のメソッドを使用して mailslot を破棄します。

mailslot にメッセージを書き込むには、次のいずれかの形式を使用して mailslot 名を指定する CreateFile 関数が使用されます。

フォーマット 使用
\\.\mailslot\name ローカル mailslot へのクライアント ハンドルを取得します。
\\computername\mailslot\name リモート mailslot へのクライアント ハンドルを取得します。
\\domainname\mailslot\name 指定したドメイン内の指定した名前を持つすべての mailslot に対するクライアント ハンドルを取得します。
\\*\mailslot\name システムのプライマリ ドメインで指定された名前を持つすべてのメールスロットに対するクライアント ハンドルを取得します。
 

CreateFile がドメインを指定するか、アスタリスク形式を使用してシステムのプライマリ ドメインを指定する場合、アプリケーションは一度に 424 バイトを超えるバイトを mailslot に書き込むことができません。 アプリケーションがそうしようとすると、WriteFile 関数は失敗し、GetLastError はERROR_BAD_NETPATHを返します。

CreateFile を使用してクライアント ハンドルを mailslot に取得する場合、アプリケーションは FILE_SHARE_READ フラグを指定する必要があります。

存在しない mailslot にアクセスするために CreateFile が呼び出されると、 ERROR_FILE_NOT_FOUND エラー コードが設定されます。

例については、「 Mailslot の作成」を参照してください。

注意

winbase.h ヘッダーは、CreateMailslot をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CloseHandle

CreateFile

GetMailslotInfo

Mailslot 関数

Mailslots の概要

SECURITY_ATTRIBUTES

SetMailslotInfo

WriteFile