查看完整版本: [-- 在Qt平台调用CreateFile,GetLastError 161 --]

QTCN开发网 -> Qt基础编程 -> 在Qt平台调用CreateFile,GetLastError 161 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lwei24 2022-04-20 13:58

在Qt平台调用CreateFile,GetLastError 161

如题,在Qt平台运行如下代码:
  1. LPCWSTR stringToLPCWSTR(std::string orig)
    {
        size_t origsize = orig.length() + 1;
        size_t convertedChars = 0;
        wchar_t* wcstring = (wchar_t*)malloc(sizeof(wchar_t) * (orig.length() - 1));
        mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);

        return wcstring;
    }

    HANDLE GetIoCtrlHandle(BYTE index)
    {
    #if 0
        QString    strDevice = QString("\\\\\\\\.\\\\PhysicalDrive%1").arg(QString::number(index));
        const wchar_t *lpFileName = reinterpret_cast<const wchar_t *>(strDevice.utf16());
    #else
        std::string    strDevice = QString("\\\\\\\\.\\\\PhysicalDrive%1").arg(QString::number(index)).toStdString();
        LPCWSTR lpFileName = stringToLPCWSTR(strDevice);
    #endif

        return ::CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ | FILE_SHARE_WRITE,
                            NULL, OPEN_EXISTING, 0, NULL);
    }


如上,获取的句柄总是INVALID_HANDLE_VALUE(非法的),报错GetLastError 161,路径无效。但在win32环境下
  1. HANDLE GetIoCtrlHandle(BYTE index)
    {
        CString    strDevice;
        strDevice.Format(_T("\\\\.\\PhysicalDrive%d"), index);

        return ::CreateFile(strDevice, GENERIC_READ | GENERIC_WRITE,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL, OPEN_EXISTING, 0, NULL);
    }



为什么在win32下就可以获取句柄,在Qt平台,它总是返回句柄非法呢?各位大佬帮忙看看,到底哪里错了,怎么改,才能在Qt平台上获取有效的句柄呢?欢迎各位大佬指点一下,小弟在此先谢过了!




20091001753 2022-04-20 20:59
创建文件,你直接用 QFile 呗

lwei24 2022-04-21 08:27
20091001753:创建文件,你直接用 QFile 呗 (2022-04-20 20:59) 

不能吧,因为我要用句柄去获取硬盘的SMART信息,不是你想的简单创建文件就完了。Qt目前好像做不到这样吧。


查看完整版本: [-- 在Qt平台调用CreateFile,GetLastError 161 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled