lwei24 |
2022-04-20 13:58 |
在Qt平台调用CreateFile,GetLastError 161
如题,在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 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环境下
- 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平台上获取有效的句柄呢?欢迎各位大佬指点一下,小弟在此先谢过了!
|
|