如题,在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平台上获取有效的句柄呢?欢迎各位大佬指点一下,小弟在此先谢过了!