1

私は現在、名前付きパイプのサーバーとして機能するアプリケーションに取り組んでいます。このアプリケーションは、クライアントにデータを送信するためだけに設計されていますが (私が作成したものではありません)、パイプが切断されたときに通知する必要もあります。このタスクに対する私の考えは、 を使用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 
4

1 に答える 1