При вызове GetVolumeInformation для флоппи-дисковода и CD-ROM последние начинают проверять наличие диска. И если для CD это вроде быстро проходит, то для флоппи тормозит, обращаясь к дисководу. Можно ли как-то это обойти?
Прверять GetDriveType на REMOVABLE и игнорировать их — не катит, так как HDD тоже могут быть REMOVABLE, а по ним хочется иметь данные.
В принципе, можно не получать данные для диско A, B — но по идее, какой-нибудь LS120 или ZIP тоже может быть без дискеты, и наверное тоже будет тормозить. Как тут лучше поступить, никто не решал подобную задачу?
Здравствуйте, Marty, Вы писали:
M> Здравствуйте, коллеги!
M> При вызове GetVolumeInformation для флоппи-дисковода и CD-ROM последние начинают проверять наличие диска. И если для CD это вроде быстро проходит, то для флоппи тормозит, обращаясь к дисководу. Можно ли как-то это обойти? M>Прверять GetDriveType на REMOVABLE и игнорировать их — не катит, так как HDD тоже могут быть REMOVABLE, а по ним хочется иметь данные. M>В принципе, можно не получать данные для диско A, B — но по идее, какой-нибудь LS120 или ZIP тоже может быть без дискеты, и наверное тоже будет тормозить. Как тут лучше поступить, никто не решал подобную задачу?
В порядке обсуждения.
Есть такая функция — QueryDOSDevice. Она возвращает внутреннеее имя по диска
Увы, я не поручусь за то, что под всеми версиями NT там будет один и тот же текст. Но ИМХО для флоппи слово Floppy или для CDROM слово CDRom там всегда было. Лучше все же проверить.
Функция эта ни к какому физическому устройству не обращается, выдает данные из диспетчера объектов NT
With best regards
Pavel Dvorkin
Re: GetVolumeInformation - предотвратить обращение к CD и fl
Здравствуйте, Marty, Вы писали:
M> При вызове GetVolumeInformation для флоппи-дисковода и CD-ROM последние начинают проверять наличие диска. И если для CD это вроде быстро проходит, то для флоппи тормозит, обращаясь к дисководу. Можно ли как-то это обойти?
Что вы имеете ввиду под словом обойти? Никогда не вызывать GetVolumeInformation для такого типа устройств или вызывать только тогда когда там есть носитель?
M>Прверять GetDriveType на REMOVABLE и игнорировать их — не катит, так как HDD тоже могут быть REMOVABLE, а по ним хочется иметь данные.
Вы возможно удивитесь, но HDD подключенный через USB покажет FIXED через функцию GetDriveType. От него конечно можно добиться REMOVABLE, но не с помощью этой функции. Во-первых, для проверки у DeviceNode спрашивается свойство Capabilities и в нем проверяется флаг CM_DEVCAP_REMOVABLE. А во-вторых, в данном случае это надо спрашивать не у нода типа Disk, а у нижележащего нода типа USB Mass Storage (естественно речь идет о USB подключении)
И тем не менее не стоит путать свойство устройства Removable со свойством RemovableMedia, которое означает что в устройстве есть съемный носитель. Опять же, на этом мучения не заканчиваются обычная флешка покажет что у нее есть сменный носитель, хотя по факту это не так, но в винде все реализовано именно так, вставив флэшку вы реально можете из эксплорера выполнить команду eject.
M>В принципе, можно не получать данные для диско A, B — но по идее, какой-нибудь LS120 или ZIP тоже может быть без дискеты, и наверное тоже будет тормозить. Как тут лучше поступить, никто не решал подобную задачу?
по буквам точно лучше не ориентироваться, их можно перетасовать как угодно
операция GetVolumeInformation работает с объектом типа Volume, то есть когда имеется носитель и на нем смонтирована файловая система, в остальных случаях функция будет возвращать ошибку и система ругаться, если не включить подавление критических ошибок с помощью SetErrorMode.
Re[2]: GetVolumeInformation - предотвратить обращение к CD и
Надо перечислить все имеющиеся диски в системе и получить тип и метку тома (если вставлен носитель), и надо чтоб не тормозило
Тип — в принципе не слишком важен, (хотя я сейчас получаю изображение иконки стандартными средствами, потом, возможно, захочу заменить и выбирать как раз по типу диска). Еще по типу я генерирую название, если метка тома не задана.
Принципиально мне не очень важно, какое устройство вставлено, флешка или хард диск, важнее добится максимальной схожести с проводником, с тем, как он показывает диски.
Здравствуйте, Marty, Вы писали:
M> По поводу ZIP, LS120 — я предположил, что подобные устройства со сменным носителем могут иметь букву диска больше чем 'B'.
Абсолютно не факт. Если Win9x еще имели такую гарантию, то NT-линейка может смонтировать как A: много чего интересного