C# 互操作 GetNamedPipeClientProcessId ERROR_NOT_FOUND 1168 (0x490)
C# Interop GetNamedPipeClientProcessId ERROR_NOT_FOUND 1168 (0x490)
我不明白为什么会收到 ERROR_NOT_FOUND
/ 1168 (0x490) 错误代码。如果我将 GetNamedPipeClientProcessId
替换为 GetNamedPipeServerProcessId
,我就成功获取了服务器的进程 ID。
代码:
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out int ClientProcessId);
int GetNamedPipeClientProcessId(NamedPipeServerStream pipeServer)
{
var hPipe = pipeServer.SafePipeHandle.DangerousGetHandle();
if (GetNamedPipeClientProcessId(hPipe, out var clientProcessId))
{
return clientProcessId;
}
else
{
var error = Marshal.GetLastWin32Error();
return 0;
}
}
您需要在客户端调用 CallNamedPipe
or CreateFile
连接到名称管道后调用 GetNamedPipeClientProcessId
。如果客户端未连接到名称管道,GetNamedPipeClientProcessId
将失败并显示 ERROR_NOT_FOUND
(0x490)。
我不明白为什么会收到 ERROR_NOT_FOUND
/ 1168 (0x490) 错误代码。如果我将 GetNamedPipeClientProcessId
替换为 GetNamedPipeServerProcessId
,我就成功获取了服务器的进程 ID。
代码:
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out int ClientProcessId);
int GetNamedPipeClientProcessId(NamedPipeServerStream pipeServer)
{
var hPipe = pipeServer.SafePipeHandle.DangerousGetHandle();
if (GetNamedPipeClientProcessId(hPipe, out var clientProcessId))
{
return clientProcessId;
}
else
{
var error = Marshal.GetLastWin32Error();
return 0;
}
}
您需要在客户端调用 CallNamedPipe
or CreateFile
连接到名称管道后调用 GetNamedPipeClientProcessId
。如果客户端未连接到名称管道,GetNamedPipeClientProcessId
将失败并显示 ERROR_NOT_FOUND
(0x490)。