使用C#获取连接到命名pipe道服务器的客户端的进程ID

我不确定我是否没有看到它,或者是什么? 我需要知道从NamedPipeServerStream实例通过命名pipe道连接到我的服务器的客户端的进程ID。 这样可能吗?

同时我想出了这个function:

 [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,我在这里使用更好。

Solutions Collecting From Web of "使用C#获取连接到命名pipe道服务器的客户端的进程ID"

该代码的主要问题是它不执行正确的错误处理。 您需要检查GetNamedPipeClientProcessId的返回值以检测错误。

 [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out uint ClientProcessId); public static uint getNamedPipeClientProcID(NamedPipeserverStream pipeserver) { UInt32 nProcID; IntPtr hPipe = pipeserver.SafePipeHandle.DangerousGetHandle(); if (GetNamedPipeClientProcessId(hPipe, out nProcID)) return nProcID; return 0; }