Winapi 读取mbr时Createfile失败

Winapi 读取mbr时Createfile失败,winapi,mbr,Winapi,Mbr,在WinXP上读取mbr时Createfile失败。返回-1,即无效的\u设备\u句柄 HANDLE hDisk = CreateFile((LPCWSTR)"\\\\.\\PhysicalDrive0", GENERIC_READ| GENERIC_WRITE, FILE_SHARE_READ| FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,NULL ); 知道为什么吗?你忘了在字符串常量“\\.\PhysicalDrive0”中添加“L” 只有在使用un

在WinXP上读取mbr时Createfile失败。返回-1,即
无效的\u设备\u句柄

HANDLE hDisk = CreateFile((LPCWSTR)"\\\\.\\PhysicalDrive0", GENERIC_READ| GENERIC_WRITE, FILE_SHARE_READ| FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,NULL );

知道为什么吗?

你忘了在字符串常量“\\.\PhysicalDrive0”中添加“L”

只有在使用unicode版本的API(即CreateFileW())时,此选项才正确。

使用此选项:

HANDLE hDisk = CreateFile(L"\\\\.\\PhysicalDrive0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

这对我很有用。

如果你要使用
L“…”
那么你应该调用
CreateFileW()
明确地说:
CreateFileW(L“\\\\\.\\PhysicalDrive0”,…)
,否则使用
TEXT()
宏:
CreateFile(TEXT(“\\\\\\\\\.\\PhysicalDrive0”),…)
HANDLE hDisk = CreateFile(L"\\\\.\\PhysicalDrive0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);