磁盘映射

gumuguo 2009-06-04 10:06:47
用WNetAddConnection进行映射
在我这边显示的路径是\\192.168.1.104\software (d)
192.168.1.104是我同事的电脑 他共享的文件名是software ,(d)好像是系统自动添加的
我用运行\\192.168.1.104进入他的共享不需要密码
res=WNetAddConnection("\\\\192.168.1.104\software","","s:");
res=WNetAddConnection("\\\\192.168.1.104\software (d)","","s:");
都不能成功映射 getlasterror是53即找不到网络路径

使用WNetAddConnection2进行映射
NETRESOURCE nr;
DWORD res;
TCHAR szUserName[32] = "",//MyUserName
szPassword[32] = "",//MyPassword
szLocalName[32] = "Q:",
szRemoteName[MAX_PATH] = "\\\\192.168.1.104\\software";
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = szLocalName;
nr.lpRemoteName = szRemoteName;
nr.lpProvider = NULL;
res = WNetAddConnection2(&nr, szPassword, szUserName, FALSE);
返回的错误是 ERROR_BAD_DEV_TYPE
最大的困惑是不需要密码登陆 是否账号密码都可设为"",
路径到底要不要+(d)
...全文
771 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
an_bachelor 2009-06-04
  • 打赏
  • 举报
回复
右键我的电脑-〉管理-〉共享文件夹 也行
skyxie 2009-06-04
  • 打赏
  • 举报
回复
在命令行中
skyxie 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gumuguo 的回复:]
怎么把系统的共享断开
[/Quote]
在命令中 net use 看共享名
然后 net use <共享名> /delete
gumuguo 2009-06-04
  • 打赏
  • 举报
回复
怎么把系统的共享断开
an_bachelor 2009-06-04
  • 打赏
  • 举报
回复
你的系统已经用guest连了 你先把系统的那个共享断开
gumuguo 2009-06-04
  • 打赏
  • 举报
回复
改成了
NETRESOURCE nr;
DWORD res;
TCHAR szUserName[32] = "guest",//MyUserName
// TCHAR szUserName[32] = "",//MyUserName

szPassword[32] = "",//MyPassword
szLocalName[32] = "q:",
szRemoteName[MAX_PATH] = "\\\\192.168.1.104\\software (d)";

nr.dwType = RESOURCETYPE_DISK;
nr.lpLocalName = szLocalName;
nr.lpRemoteName = szRemoteName;
nr.lpProvider = NULL;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;

res = WNetAddConnection2(&nr, szPassword, szUserName, FALSE);
使用 TCHAR szUserName[32] = "guest",//MyUserName
getlasterror是1219 ERROR_SESSION_CREDENTIAL_CONFLICT
使用 TCHAR szUserName[32] = "",//MyUserName
getlasterror是 ERROR_ACCESS_DENIED
skyxie 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 an_bachelor 的回复:]
"\software" ->"\\software"啊 \s就被看成转义了
"\\\\192.168.1.104\\software (d)"
[/Quote]

对头!
an_bachelor 2009-06-04
  • 打赏
  • 举报
回复
"\software" ->"\\software"啊 \s就被看成转义了
"\\\\192.168.1.104\\software (d)"
gumuguo 2009-06-04
  • 打赏
  • 举报
回复
说的是路径错误
但\\192.168.1.104\software (d)就能直接访问
路径不是在这个前面再加上\\么
gumuguo 2009-06-04
  • 打赏
  • 举报
回复
我在IE上输入\\192.168.1.104\software (d)可以直接访问
现在我把程序改成了
NETRESOURCE nr;
DWORD res;
TCHAR szUserName[32] = "guest",//MyUserName
szPassword[32] = "",//MyPassword
szLocalName[32] = "q:",
szRemoteName[MAX_PATH] = "\\\\192.168.1.104\software (d)";

nr.dwType = RESOURCETYPE_DISK;
nr.lpLocalName = szLocalName;
nr.lpRemoteName = szRemoteName;
nr.lpProvider = NULL;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;

res = WNetAddConnection2(&nr, szPassword, szUserName, FALSE);
还是错误53 ERROR_BAD_NETPATH
skyxie 2009-06-04
  • 打赏
  • 举报
回复

NETRESOURCE nr;
DWORD res;
TCHAR szUserName[32] = "",//MyUserName
szPassword[32] = "",//MyPassword
szLocalName[32] = "Q:",
szRemoteName[MAX_PATH] = "\\\\192.168.1.104\\software"; //这里需要先确认 是否带(d)
//直接在你的explorer中
nr.dwType = RESOURCETYPE_DISK;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
nr.lpLocalName = szLocalName;
nr.lpRemoteName = szRemoteName;
nr.lpProvider = NULL;
res = WNetAddConnection2(&nr, szPassword, szUserName, FALSE);

直接在你的explorer中输入
\\192.168.1.104\software
或者
\\192.168.1.104\software (d)
看看哪个能访问
skyxie 2009-06-04
  • 打赏
  • 举报
回复
1. 你在 192.168.1.104 的命令行运行 net share 命令看看它的共享名到底是software 还是 software (d)

2.
MSDN:
If the lpLocalName member points to a nonempty string, this member can be equal to RESOURCETYPE_DISK or RESOURCETYPE_PRINT.
---
nr.dwType = RESOURCETYPE_ANY;
改为=>
nr.dwType = RESOURCETYPE_DISK;

3. 添加
nr.dwScope = RESOURCE_GLOBALNET; //Enumerate all resources on the network. The dwUsage member is specified.
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE; // The resource is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection.

4. 不需要密码时传 ""
If this parameter is NULL, the default password is used. If the string is empty, no password is used.

an_bachelor 2009-06-04
  • 打赏
  • 举报
回复
那个共享名有(d)就要加 他的系统上实际目录是什么名字对你没意义 你只管虚拟路径(共享名)
匿名访问你可以指定guest用户 账号用"" 会看你当前进程用什么账户开的 所以不能用""

nr.dwType = RESOURCETYPE_DISK;
因为
“If lpLocalName is NULL, or if it points to an empty string, dwType can be equal to RESOURCETYPE_DISK, RESOURCETYPE_PRINT, or RESOURCETYPE_ANY.


还有没有别的错误我就不知道 试试看
gumuguo 2009-06-04
  • 打赏
  • 举报
回复
断开了还是不行
我用一代却是好使
res=WNetAddConnection("\\\\192.168.1.104\\software (d)","","p:");
一下就搞定了 强烈鄙视2代 WNetAddConnection

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧