0

使用 IOCTL_DISK_GET_LENGTH_INFO 调用 DeviceIoContro() 在 Windows 中在未安装的驱动器上保持一分钟或更长时间。我正在尝试调查和打印在线驱动器的长度。这种保持行为在用户界面中是不可接受的。有没有人有解决这个问题的好方法?

我在 Windows 中使用物理磁盘名称调用,例如“\\.\PhysicalDrive0”。它停止的驱动器是 DVD 驱动器,即可移动驱动器。我不在乎 Windows 是否可以在足够的时间内启动驱动器。实际上,驱动器中没有磁盘,Windows 显然等待了很长时间才能尝试使驱动器上线。如果驱动器没有旋转,我希望它立即失败。

提前致谢。

斯科特·摩尔

代码是:

int testsize( /** 要设置的驱动器号/ int drive, / * 返回磁盘大小 */ long long *size )

{

GET_LENGTH_INFORMATION li;
BOOL r;
DWORD rsize;

HANDLE driveh;

//open the physical disk
driveh = CreateFile(phystr[drive],
                 GENERIC_READ | GENERIC_WRITE,
                 FILE_SHARE_DELETE |
                 FILE_SHARE_READ |
                 FILE_SHARE_WRITE,
                 NULL,
                 OPEN_EXISTING,
                 0,
                 NULL);

if (driveh == INVALID_HANDLE_VALUE) return 1;

// get size of disk
r = DeviceIoControl(driveh, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &li, sizeof(li), 
                    &rsize, NULL);
if (r == 0) {

    return 1; // just return error

}

// place to caller
*size = li.Length.QuadPart;

//close the disk
CloseHandle(driveh);

return 0;

}

4

0 回答 0