列出不同计算机上的命名管道

list named pipes on different computer

本文关键字:管道 计算机      更新时间:2023-10-16

有很多关于如何在同一台计算机上列出管道的例子(使用pipelist实用程序,或调用ntddl/NtQueryDirectoryFile)。但是,我需要列出远程系统(在同一域或工作组)上的管道。尝试以编程方式访问"\Pipe",返回INVALID_HANDLE_VALUE和GetLastError - 123。

hPipe = CreateFile(L"\\10.0.0.11\Pipe\", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL);
DWORD dwErr = GetLastError();  // returns 123
if(hPipe == INVALID_HANDLE_VALUE)
    return 1;

经过一番研究,我发现只要提供正确的安全上下文,命名管道可以跨网络工作。例如,如果同一个域用户登录到两个工作站,则命名管道都在工作。

不幸的是,我没能找到一种方法来列出不同计算机上的管道。c# Directory.GetFiles(@"hostPipe")抛出异常"Incorrect function".

所以,我的回答是:没有办法在Win32中获得不同计算机上的命名管道列表。如果我说错了,请纠正我。

我决定实现套接字服务器,它将通过TCP提供开放管道列表。

编辑:后来我在github上找到了PAExec实用程序的源代码。从源我学会了如何使用WNetOpenEnum/WNetAddConnection2连接到远程IPC$并注入我自己的实用程序,返回打开管道列表。