首页| 论坛| 消息

标题:在Qt平台调用CreateFile,GetLastError 161
作者:lwei24
日期:2022-04-20 13:58
内容:

如题,在Qt平台运行如下代码:
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
QStringstrDevice = QString("\\\\\\\\.\\\\PhysicalDrive%1").arg(QString::number(index));
const wchar_t *lpFileName = reinterpret_cast(strDevice.utf16());
#else
std::stringstrDevice = 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环境下
HANDLE GetIoCtrlHandle(BYTE index)
{
CStringstrDevice;
strDevice.Format(_T("\\\\.\\PhysicalDrive%d"), index);
return ::CreateFile(strDevice, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
}
..


#1 [20091001753 04-20 20:59]
创建文件,你直接用 QFile 呗
#2 回 20091001753 的帖子 [lwei24 04-21 08:27]
20091001753:创建文件,你直接用 QFile 呗 (2022-04-20 20:59) 
不能吧,因为我要用句柄去获取硬盘的SMART信息,不是你想的简单创建文件就完了。Qt目前好像做不到这样吧。

回复 发表
主题 版块