【发布时间】:2021-04-09 01:37:13
【问题描述】:
我在我的家庭网络中运行三台计算机,它们都在同一个工作组中。现在我想在我的计算机上找出哪些卷存在/安装在我的网络中的其他计算机上,我想在我的 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;
}
该代码为我提供了家庭网络中所有计算机的完美列表。现在我试图弄清楚如何获取当前用户可以访问的卷和/或目录的名称。这可能需要我一段时间,我会返回更多结果。
【问题讨论】:
-
@Alan:谢谢你的评论。我会试一试,让你知道我的成功。
-
嗨,这个例子需要我一段时间。我已经使用 C# 多年了,必须重新学习才能使用 C++。
-
@Alan:嘿,函数 NetShareEnum 对我有用。问题是我必须使用 level=1 (而不是需要管理员权限的 level=2)。而且我不必使用 C++(这可能非常强大,但要花费我太多时间才能达到足够的水平。谢谢。
标签: c++ winapi remote-access remote-server