私は現在、名前付きパイプのサーバーとして機能するアプリケーションに取り組んでいます。このアプリケーションは、クライアントにデータを送信するためだけに設計されていますが (私が作成したものではありません)、パイプが切断されたときに通知する必要もあります。このタスクに対する私の考えは、 を使用GetNamedPipeHandleState()
してパイプのインスタンス数を取得し、パイプがまだシステムに常駐しているかどうかを確認することでした。接続されていない場合、クライアントが再接続してアプリケーションからのデータのプルを再開できるように、プログラムはパイプをリセットするように設計されています。残念ながら、パイプのインスタンス数を取得できません。呼び出しが行われるたびに、関数は失敗して をGetLastError()
返しERROR_ACCESS_DENIED
ます。ただし、これは次のように呼び出しを試みた場合にのみ発生します。
GetNamedPipeHandleStateA(pipe,0,&npipeinstances,0,0,0,0);
次のように関数を呼び出すと:
GetNamedPipeHandleStateA(pipe,0,0,0,0,0,0);
エラーは発生しませんが、状態情報を受け取りません。欠落している可能性のある作成パラメーター、またはこの情報を確認するためのより良い方法はありますか?
パイプの作成コードは次のとおりです。
pipe=CreateNamedPipeA(pipename, // name of the pipe
PIPE_ACCESS_OUTBOUND, // read/write access
PIPE_TYPE_MESSAGE | // message type pipe
PIPE_WAIT, // blocking mode
1, // max. instances
65535, // output buffer size
65535, // input buffer size
300, // client time-out
NULL); // default security attribute