使用 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;
}