【问题标题】:Crash on DeviceIoControl callDeviceIoControl 调用崩溃
【发布时间】:2018-11-30 09:34:10
【问题描述】:

我正在尝试让我的硬盘上的分区偏移。我是这样做的:

PDRIVE_LAYOUT_INFORMATION_EX partitions;
DWORD partitionsSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) 
                       + 127 * sizeof(PARTITION_INFORMATION_EX);
partitions = (PDRIVE_LAYOUT_INFORMATION_EX)malloc(partitionsSize);

HANDLE h = CreateFile(L"\\\\.\\PhysicalDrive0", FILE_ANY_ACCESS , 
                      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
                      OPEN_EXISTING, 0, 0);
if (h == INVALID_HANDLE_VALUE)
{
   // handle error and exit
}
if (DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0, partitions, 
                    partitionsSize, 0, NULL) != 0)
{
   // do stuff with partitions here
}

它在 Windows 10 上运行良好,但在 Windows 7 上失败(在 DeviceIoControl 调用上)。调试器输出为:Exception at 0x7fefcc3b2b2, code: 0xc0000005: write access violation at: 0x1, flags=0x0

我试过:以管理员身份运行,更改 CreateFile 上的文件访问参数,google(可能不够好)

我使用:Microsoft Visual Studio 14.0

【问题讨论】:

  • 最后 2 个参数之一(lpBytesReturnedlpOverlapped)不得为 0。和 Visual Studio 版本,以管理员身份运行,更改 CreateFile 上的文件访问参数 - 不能影响访问冲突DeviceIoControl
  • @RbMm,谢谢。它解决了问题!

标签: c++ windows winapi windows-7 windows-10


【解决方案1】:

我漫不经心地阅读文档。答案在 cmets(@RbMm 回答)

最后 2 个参数之一(lpBytesReturned 或 lpOverlapped)不得 0.和visual studio版本,以管理员身份运行,在CreateFile上更改文件访问参数-不能影响访问冲突

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2019-02-22
    • 2016-02-11
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多