#include "wnetutility.h" #include //#include #include "LHQLogAPI.h" #ifdef Q_OS_WIN #include #endif //------------------------------------------------------------------------ //函 数:WNetTryConnect(const QString &strPath,const QString &strUser,const QString &strPwd) // //说 明:测试WNet连接,远程访问时用到 // //参 数: //[传入]strPath 路径 //[传入]strUser 用户名 //[传入]strPwd 密码 // //返 回 值:是否成功 //------------------------------------------------------------------------ bool WNetUtility::WNetTryConnect(const QString &strPath,const QString &strUser,const QString &strPwd) { bool bRet = false; #ifdef Q_OS_WIN QString remotePath(strPath); int index = remotePath.indexOf("\\\\"); if (index >= 0) { index = remotePath.indexOf("\\", index + 2); if (index > 0) { remotePath = remotePath.left(index); } } NETRESOURCE nr; nr.dwScope = RESOURCE_GLOBALNET; nr.dwType = RESOURCETYPE_DISK; nr.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE; nr.dwUsage = RESOURCEUSAGE_CONTAINER; nr.lpLocalName = nullptr; size_t len = wcslen(remotePath.toStdWString().data()) + 1; std::unique_ptr wcs(new wchar_t[len]{0}); wcscpy_s(wcs.get(), len, remotePath.toStdWString().data()); nr.lpRemoteName = wcs.get(); nr.lpProvider = nullptr; size_t userLen = wcslen(strUser.toStdWString().data()) + 1; std::unique_ptr lpszUser(new wchar_t[userLen]{0}); wcscpy_s(lpszUser.get(), userLen, strUser.toStdWString().data()); size_t pdLen = wcslen(strPwd.toStdWString().data()) + 1; std::unique_ptr lpszPwd(new wchar_t[pdLen]{0}); wcscpy_s(lpszPwd.get(), pdLen, strPwd.toStdWString().data()); // 取消连接 DWORD dwReturn1 = WNetCancelConnection2(wcs.get(),CONNECT_UPDATE_PROFILE, true); if (NO_ERROR != dwReturn1) { DoLog(QString("远程共享目录断开连接失败!错误码:%1").arg(dwReturn1)); } DWORD dwReturn = WNetAddConnection2(&nr, lpszPwd.get(), lpszUser.get(), 0); DoLog(QString("远程共享目录连接结果:%1").arg(dwReturn)); if (NO_ERROR == dwReturn || ERROR_DEVICE_ALREADY_REMEMBERED == dwReturn || (ERROR_SESSION_CREDENTIAL_CONFLICT == dwReturn && dwReturn1 != ERROR_NOT_CONNECTED)) { bRet = true; } else { qInfo() << QString("远程共享目录登陆失败!错误码:%1").arg(dwReturn); if (ERROR_LOGON_FAILURE == dwReturn) { //DoLog("连接失败!"); } bRet = false; } #else // Linux挂载? #endif return bRet; }