Windows DeviceIoContro() с IOCTL_DISK_GET_LENGTH_INFO занимает очень много времени

Вызов DeviceIoContro() с IOCTL_DISK_GET_LENGTH_INFO удерживается в окнах в течение минуты или более на дисках, которые не смонтированы. Я пытаюсь обследовать и распечатать онлайн диски с их длинами. Такое поведение удержания недопустимо в пользовательском интерфейсе. У кого-нибудь есть хороший способ обойти это?

Я использую вызов для имен физических дисков в Windows, например "\\.\PhysicalDrive0". Диск, на котором он останавливается, является приводом DVD, т.е. съемным. Мне все равно, если окна могут раскрутить диск, если достаточно времени. Как таковой, в дисководе нет диска, и 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;

}

0 ответов

Другие вопросы по тегам