TransactNamedPipe

指定した名前付きパイプにメッセージを書き込む処理と読み取る処理を、単一の操作として組み合わせる。

TransactNamedPipe hNamedPipe, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesRead, lpOverlapped

hNamedPipe : [intptr] CreateNamedPipe または CreateFile が返した名前付きパイプのハンドル。
lpInBuffer : [intptr] パイプに書き込むデータを含むバッファへのポインタ。
nInBufferSize : [int] 入力バッファのサイズ(バイト単位)。
lpOutBuffer : [intptr] パイプから読み取ったデータを受け取るバッファへのポインタ。
nOutBufferSize : [int] 出力バッファのサイズ(バイト単位)。
lpBytesRead : [var] パイプから読み取ったバイト数を受け取る変数へのポインタ。
lpOverlapped : [var] OVERLAPPED 構造体へのポインタ。hNamedPipe が FILE_FLAG_OVERLAPPED で開かれていれば本構造体は必須である。

(プラグイン / モジュール : kernel32.dll)

解説

指定した名前付きパイプにメッセージを書き込む処理と読み取る処理を、単一の操作として組み合わせる。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼ぶ。読み取るメッセージが nOutBufferSize より長い場合、TransactNamedPipe は
FALSE を返し GetLastError は ERROR_MORE_DATA を返す。残りは ReadFile /
ReadFileEx / PeekNamedPipe で読み取れる。

[備考]

サーバがメッセージタイプパイプとして作成していないか、パイプハンドルがメッセージ読み取りモードでない場合、TransactNamedPipe
は失敗する。たとえばクライアントがサーバと同一マシンで動作し \\.\pipe\pipename 形式でパイプを開くと、NPFS
によりバイトモードで開かれる。\\server\pipe\pipename
形式を使うとリダイレクタはメッセージモードで開く。バイトモードのハンドルは SetNamedPipeHandleState
でメッセージ読み取りモードに変更できる。本関数は lpOutBuffer
指定バッファにデータが書き込まれるまで完了できない。lpOverlapped
により呼び出し側スレッドは操作のバックグラウンド実行中に他作業ができる。名前付きパイプトランザクションの最大保証サイズは 64 KB
である。場合によっては 64 KB 超のトランザクションも可能だが、保証されない。よって名前付きパイプトランザクションは 64 KB
以内に制限することを推奨する。Windows 10 version 1709: パイプはアプリコンテナ内、すなわち同じアプリの一部である
UWP プロセス間でのみサポートされる。また名前付きパイプは `\\.\pipe\LOCAL\` 構文を使う必要がある。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs