2

我正在尝试访问网络驱动器(\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 是正确的。

所以基本上我的问题是:我如何让上述代码工作?考虑到我的任务,这是正确的方法(如果不是,你会怎么做)?

4

1 回答 1

2

我相信你需要清除NETRESOURCE结构(或直接初始化所有成员)。设置其他值之前的 memset 可能会有所帮助:

memset( &nr, 0, sizeof( nr ));

此外,您需要指定注释中指出的共享名称:

wchar_t remoteName[] = L"\\\\server\\share";

此外,如果您想将其与特定驱动器号相关联,您可以设置此成员:

nr.lpLocalName = L"z:";

如果不清除结构或以某种方式对其进行初始化,诸如 lpLocalName 之类的元素将在其中包含“随机”堆栈数据并导致未定义的行为。

于 2011-01-20T15:35:09.023 回答