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; }
|