如何枚举远程计算机上的卷



我在家庭网络中运行三台计算机,它们都在同一个工作组中。现在,我想在我的计算机上找出网络中其他计算机上存在/安装的卷,我想用我的C++/C#代码来做这件事。

方法NetServerEnum运行良好,并在我的网络中提供计算机名称,但现在我陷入了困境,无法识别列出此类命名的"远程"计算机的卷的函数。我已经尝试过函数NetServerDiskEnum,但收到ERROR_ACCESS_DENIED。还有其他函数可以起作用吗?(任何文件对话框都可以做到这一点,但我需要将其包含在我的代码中,并且无需操作员干预

有人给我暗示吗?

更新(2021-04-08(多亏了阿兰,他给了我很多尝试。我决定继续使用不需要任何提升权限的WNetEnumResource。这是我的代码:

#include <windows.h>
int main ( int nArgc, char** lppszArgv )
{
DWORD ErrCode;
HANDLE hEnum;
DWORD dwCount;
DWORD BfSize = 0x1000;
ErrCode = WNetOpenEnum ( RESOURCE_CONTEXT, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, NULL, &hEnum );
if ( ErrCode == NO_ERROR )
{
BYTE ucBuffer[0x1000];
NETRESOURCE* lpNr = (NETRESOURCE*)ucBuffer;
do
{
dwCount = 1;
ErrCode = WNetEnumResource ( hEnum, &dwCount, ucBuffer, (LPDWORD)&BfSize );
}
while ( ErrCode == NO_ERROR && dwCount == 1 );
ErrCode = WNetCloseEnum ( hEnum );
}
return 0;
}

这个代码给了我一个家庭网络中所有计算机的完美列表。现在我试图弄清楚如何获得当前用户可以访问的卷和/或目录的名称。这可能需要一段时间,我会得到更多的结果。

我已经尝试过函数NetServerDiskEnum,但收到ERROR_ACCESS_DENIED。

这是因为只有AdministratorsServer Operators本地组的成员才能在远程计算机上成功执行NetServerDiskEnum功能。

参考:NetServerDiskEnum备注

相反,成功执行NetServerEnum函数不需要特殊的组成员身份。

还有其他函数可以做到这一点吗?

考虑到您在自己的家庭网络上运行这些计算机,您可以简单地设置具有管理员权限的域用户。

请参阅:如何为域用户设置管理员权限?

如果您不想设置管理员权限,WMI是另一个选项。当然,实现方法将比调用NetServerDiskEnum更复杂。

使用"获取体积"获取指定的"体积"对象,如果未提供过滤器,则使用"获取所有体积"对象。

类似案例:如何获得远程计算机的磁盘容量和可用空间

WMI不仅可以依靠PowerShell来实现它们的方法,还可以依靠C++来实现。如果你感兴趣,从这个例子中学习是一个好的开始。

返回主题,默认情况下,允许管理员组的成员远程连接到计算机。但是,您可以为某些用户和组授予DCOM远程启动和激活权限。

步骤:将DCOM安全设置为允许用户远程访问计算机

最新更新