• 1357阅读
  • 2回复

在Qt平台调用CreateFile,GetLastError 161 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2022-04-20
如题,在Qt平台运行如下代码:
  1. LPCWSTR stringToLPCWSTR(std::string orig)
  2. {
  3.     size_t origsize = orig.length() + 1;
  4.     size_t convertedChars = 0;
  5.     wchar_t* wcstring = (wchar_t*)malloc(sizeof(wchar_t) * (orig.length() - 1));
  6.     mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
  7.     return wcstring;
  8. }
  9. HANDLE GetIoCtrlHandle(BYTE index)
  10. {
  11. #if 0
  12.     QString    strDevice = QString("\\\\\\\\.\\\\PhysicalDrive%1").arg(QString::number(index));
  13.     const wchar_t *lpFileName = reinterpret_cast<const wchar_t *>(strDevice.utf16());
  14. #else
  15.     std::string    strDevice = QString("\\\\\\\\.\\\\PhysicalDrive%1").arg(QString::number(index)).toStdString();
  16.     LPCWSTR lpFileName = stringToLPCWSTR(strDevice);
  17. #endif
  18.     return ::CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE,
  19.                         FILE_SHARE_READ | FILE_SHARE_WRITE,
  20.                         NULL, OPEN_EXISTING, 0, NULL);
  21. }


如上,获取的句柄总是INVALID_HANDLE_VALUE(非法的),报错GetLastError 161,路径无效。但在win32环境下
  1. HANDLE GetIoCtrlHandle(BYTE index)
  2. {
  3.     CString    strDevice;
  4.     strDevice.Format(_T("\\\\.\\PhysicalDrive%d"), index);
  5.     return ::CreateFile(strDevice, GENERIC_READ | GENERIC_WRITE,
  6.         FILE_SHARE_READ | FILE_SHARE_WRITE,
  7.         NULL, OPEN_EXISTING, 0, NULL);
  8. }



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



在线20091001753

只看该作者 1楼 发表于: 2022-04-20
创建文件,你直接用 QFile 呗
(づ ̄ 3 ̄)づ
离线lwei24

只看该作者 2楼 发表于: 2022-04-21
回 20091001753 的帖子
20091001753:创建文件,你直接用 QFile 呗 (2022-04-20 20:59) 

不能吧,因为我要用句柄去获取硬盘的SMART信息,不是你想的简单创建文件就完了。Qt目前好像做不到这样吧。
快速回复
限100 字节
 
上一个 下一个