12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "wnetutility.h"
- #include <memory>
- //#include <QDebug>
- #include "LHQLogAPI.h"
- #ifdef Q_OS_WIN
- #include <windows.h>
- #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<wchar_t[]> 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<wchar_t[]> 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<wchar_t[]> 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;
- }
|