TransactNamedPipe |
Declare Function Api_TransactNamedPipe& Lib "kernel32" Alias "TransactNamedPipe" (ByVal hNamedPipe&, lpInBuffer As Any, ByVal nInBufferSize&, lpOutBuffer As Any, ByVal nOutBufferSize&, lpBytesRead&, lpOverlapped As OVERLAPPED) |
Declare Function TransactNamedPipe Lib "kernel32" Alias "TransactNamedPipe" (ByVal hNamedPipe As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesRead As Long, lpOverlapped As OVERLAPPED) As Long |
|
指定された名前付きパイプに対する書き込み操作と読み取り操作を組み合わせ、1 回のネットワーク操作を形成する。 |
|
パラメータ 取り操作を行う場合、 関数を呼び出すと、読み取ったバイト数を取得できる。hNamedPipe ハンドルが I/O 完了ポートに関連付けられてい
る場合、 関数を呼び出すと、読み取ったバイト数を取得できる。
ルを指している場合、この構造体を指定する必要がある。 メータで NULL を指定することはできない。このような場合に lpOverlapped パラメータで NULL を指定すると、実際には接続操作が完了
していないのに、この関数は接続操作が完了したと報告することがある。 タが NULL ではない場合、TransactNamedPipe 関数はオーバーラップ(非同期)操作として実行される。OVERLAPPED 構造体で、 関 数を使って作成した手動リセットイベントオブジェクトを指定するべきである。指定された操作をすぐに完了できない場合、 TransactNamedPipe 関数は 0(FALSE)を返し、GetLastError 関数は ERROR_IO_PENDING を返す。この場合、このイベントオブジェ
クトは、関数が制御を返す前に非シグナル状態に設定され、操作が完了すると、シグナル状態になる。
TransactNamedPipe 関数は、操作が完了するまで制御を返さない。 の関数は失敗する。たとえば、クライアントプロセスがサーバープロセスと同じコンピュータで動作していて、\\.\pipe\pipename の形式を使 ってパイプを開いた場合、名前付きファイルシステム(NPFS)はそのパイプをバイトモードで開く。クライアントが \\server\pipe\pipename の 形式を使った場合、リダイレクタはそのパイプをメッセージモードで開く。SetNamedPipeHandleState 関数を使うと、バイトモードのパイプハ
ンドルをメッセージ読み取りモードへ変更できる。
実行されている間に、呼び出し側スレッドが他の操作を実行できるように、lpOverlapped パラメータが用意されている。 GetLastError 関数は ERROR_MORE_DATA を返する。続けて、ReadFile、ReadFileEx、PeekNamedPipe のいずれかの関数を呼び 出すと、残りのメッセージを読み取ることができる。 |