我正在尝试访问网络驱动器(\ servername或\ ipadress)。我们的想法是只能通过应用程序访问驱动器,并且网络驱动器上的登录应该仅由应用程序使用。 到目前为止,我只找到了看起来像我想要的WNetUseConnection函数(http://msdn.microsoft.com/en-us/library/aa385482%28VS.85%29.aspx)。不幸的是,我无法让它发挥作用。代码如下:
NETRESOURCE nr;;
nr.dwType = RESOURCETYPE_DISK;
wchar_t remoteName[] = L"\\\\myremotenetworkdrive";
nr.lpRemoteName = remoteName;
wchar_t pswd[] = L"mypswd";
wchar_t usrnm[] = L"usrname";
int ret = WNetUseConnection(NULL, &nr, pswd, usrnm, 0, NULL, NULL, NULL);
std::cerr << "return code: " << ret << std::endl;
返回码首先是1200(ERROR_BAD_DEVICE),另一个函数调用后更改为487(ERROR_INVALID_ADDRESS)。地址(如果我在那里放4个反斜杠,但也尝试用两个或根本没有任何)用户名和pswd是正确的。
基本上我的问题是:我如何让obove代码工作?考虑到我的任务,这是正确的方法(如果不是你会怎么做)?
答案 0 :(得分:2)
我认为您需要清除NETRESOURCE
结构(或直接初始化所有成员)。设置其他值之前的memset可能会有所帮助:
memset( &nr, 0, sizeof( nr ));
此外,您需要指定评论中指出的共享名称:
wchar_t remoteName[] = L"\\\\server\\share";
此外,如果要将其与特定驱动器号关联,可以设置此成员:
nr.lpLocalName = L"z:";
不清除结构或以某种方式初始化它,lpLocalName之类的元素会在其中包含“随机”堆栈数据并导致未定义的行为。