实现原理
//映射网络驱动器
void CWangshanglinjuDlg::Redirect(const char* Localname,const char* RemoteName,const char* UserName,const char* Password)
{
NETRESOURCE nr;
DWORD res;
char szUserName[32],
szPassword[32],
szLocalName[32],
szRemoteName[MAX_PATH];
strcpy(szUserName,UserName);
strcpy(szPassword,Password);
strcpy(szLocalName,Localname);
strcpy(szRemoteName,RemoteName);
nr.dwType = RESOURCETYPE_ANY;//定义连接网络资源的类型
nr.lpLocalName = szLocalName;//重定向到本地设备的名称
nr.lpRemoteName = szRemoteName;//连接网络资源的名称
nr.lpProvider = NULL;//网络资源的提供者名称
res=WNetAddConnection2(&nr,//连接细节
szPassword,//共享资源密码
szUserName,//共享资源用户名
FALSE//连接可选项
);
switch(res)
{
case NO_ERROR:
AfxMessageBox("网络驱动器映射成功");
break;
case ERROR_BAD_PROFILE:
AfxMessageBox("ERROR_BAD_PROFILE");
break;
case ERROR_CANNOT_OPEN_PROFILE:
AfxMessageBox("ERROR_CANNOT_OPEN_PROFILE");
break;
case ERROR_DEVICE_IN_USE:
AfxMessageBox("ERROR_DEVICE_IN_USE");
break;
case ERROR_EXTENDED_ERROR:
AfxMessageBox("ERROR_EXTENDED_ERROR");
break;
case ERROR_NOT_CONNECTED:
AfxMessageBox("ERROR_NOT_CONNECTED");
break;
case ERROR_OPEN_FILES:
AfxMessageBox("ERROR_OPEN_FILES");
break;
default:
AfxMessageBox("未知错误,可能需要帐号和密码认证,或者该主机或文件不存在");
break;
}
return;
}
/////////
//断开网络驱动器
void CWangshanglinjuDlg::DisConnectDirect(const char *localname)
{
DWORD dwResult;
dwResult = WNetCancelConnection2(localname,
CONNECT_UPDATE_PROFILE, // remove connection from profile
FALSE); // fail if open files or jobs
switch(dwResult)
{
case NO_ERROR:
AfxMessageBox("成功断开网络驱动器映射");
break;
case ERROR_BAD_PROFILE:
AfxMessageBox("ERROR_BAD_PROFILE");
break;
case ERROR_CANNOT_OPEN_PROFILE:
AfxMessageBox("ERROR_CANNOT_OPEN_PROFILE");
break;
case ERROR_DEVICE_IN_USE:
AfxMessageBox("ERROR_DEVICE_IN_USE");
break;
case ERROR_EXTENDED_ERROR:
AfxMessageBox("ERROR_EXTENDED_ERROR");
break;
case ERROR_NOT_CONNECTED:
AfxMessageBox("ERROR_NOT_CONNECTED");
break;
case ERROR_OPEN_FILES:
AfxMessageBox("ERROR_OPEN_FILES");
break;
default:
AfxMessageBox("未知错误");
break;
}
}