C#Interop GetNamedPipeClientProcessId ERROR_NOT_FOUND 1168(0x490)

问题描述 投票:0回答:1

我不知道为什么会收到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;
    }
}
c# windows winapi interop named-pipes
1个回答
0
投票

在客户端调用GetNamedPipeClientProcessIdCallNamedPipe连接到名称管道后,您需要调用CallNamedPipe。如果客户端尚未连接到名称管道,则CreateFile将失败,并显示CreateFile(0x490)。

© www.soinside.com 2019 - 2024. All rights reserved.