見ていないだけなのか、それとも何なのかよくわかりません。のインスタンスから名前付きパイプを介してサーバーに接続したクライアントのプロセス ID を知る必要がありますNamedPipeServerStream
。そのようなことは可能ですか?
その間、私はこの機能を思いつきました:
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out UInt32 ClientProcessId);
public static UInt32 getNamedPipeClientProcID(NamedPipeServerStream pipeServer)
{
//RETURN:
// = Client process ID that connected via the named pipe to this server, or
// = 0 if error
UInt32 nProcID = 0;
try
{
IntPtr hPipe = pipeServer.SafePipeHandle.DangerousGetHandle();
GetNamedPipeClientProcessId(hPipe, out nProcID);
}
catch
{
//Error
nProcID = 0;
}
return nProcID;
}
私は「DangerousGetHandles」と「DllImports」があまり得意ではありません。ここで使用している Win32 の方がはるかに優れています。