c++映射网络驱动器

mount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
bool sys::mount2(const std::string& szSource, const std::string& szTarget, const std::string& szUser, const std::string& szPwd, std::string& err)
{
bool res = false;
do
{
#ifdef WIN32

#ifdef UNICODE
std::wstring source = mm::Charset::ANSIToUnicode(szSource.c_str());
std::wstring target = mm::Charset::ANSIToUnicode(szTarget.c_str());
std::wstring name = mm::Charset::ANSIToUnicode(szUser.c_str());
std::wstring pwd = mm::Charset::ANSIToUnicode(szPwd.c_str());
if ('\\'==source[source.length()-1])
{
source[source.length()-1] = 0;
}
#else
std::string source=szSource;
std::string target=szTarget;
std::wstring name= szUser;
std::string pwd=szPwd;

#endif
DWORD dwRetVal;
NETRESOURCE nr;
DWORD dwFlags;
memset(&nr, 0, sizeof(NETRESOURCE));
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = (LPTSTR)(LPCTSTR)target.c_str();
nr.lpRemoteName = (LPTSTR)(LPCTSTR)source.c_str();
nr.lpProvider = NULL;
dwFlags = CONNECT_UPDATE_PROFILE;
dwRetVal = ::WNetAddConnection2(&nr, pwd.c_str(), name.c_str(), dwFlags);
if (dwRetVal != NO_ERROR)
{
LOG_ERROR("WNetAddConnection2 dwRetVal=%ld", dwRetVal);
break;
}
#endif
res = true;
} while (0);

return res;
}

umount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

bool sys::umount2(const std::string& szTarget, std::string& err)
{
bool res = false;
do
{

#ifdef WIN32

#ifdef UNICODE
std::wstring path = mm::Charset::ANSIToUnicode(szTarget.c_str());
#else
std::string path = mm::Charset::ANSIToUnicode(szTarget);
#endif //

if (::PathFileExists(path.c_str()))
{
DWORD dwRetVal = ::WNetCancelConnection2(path.c_str(), 1, true);
if (NO_ERROR != dwRetVal)
{
LOG_ERROR("WNetCancelConnection2 dwRetVal=%ld", dwRetVal);
break;
}
}

#endif //


res = true;

} while (0);


return res;
}

参考:

PathFileExists

WNetAddConnection2