-
Дмитрий Белькевич (14.08.11 09:29) [0]Пробую пример Rouse.
Во-первых нашел опечатку:
hDrive := CreateFile(PChar(@DeviceInterfaceDetailData.DevicePath[0]),
0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hFile = INVALID_HANDLE_VALUE then
Должно быть так, как я понял:
hDrive := CreateFile(PChar(@DeviceInterfaceDetailData.DevicePath[0]),
0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDrive = INVALID_HANDLE_VALUE then
Во вторых - как раз в этом месте не работает.
Не работает потому, что в DeviceInterfaceDetailData.DevicePath передаётся:
\\?\ide#diskhitachi_hts545050kta300 (дальше каша из юидов и непонятных букв).
В результате здесь код останавливается. Сообщение об ошибке: 'CreateFile Error: Не удается найти указанный файл'. -
Rouse_ © (14.08.11 14:37) [1]1. да это опечатка.
2. да, путь должен быть примерно таким: '\\?\ide#diskst3500320as_____________________________sd15____#5&5c4ddef&0&1.0.0# {53f56307-b6bf-11d0-94f2-00a0c91efb8b}' - все открывает -
Rouse_ © (14.08.11 14:39) [2]Посмотри мошт у тебя какие антивири стоят, или утилиты наподобие DeviceLock/USBGuard, они могут не давать открыть тебе устройство по ссылке.
-
Дмитрий Белькевич (14.08.11 15:36) [3]Антивирус выключил. DeviceLock/USBGuard нету. Поведение без изменений.
Строка:
\\?\ide#diskhitachi_hts545050kta300_________________bkfoc60g#4&194af51e&0&0.0.0# {53f56307-b6bf-11d0-94f2-00a0c91efb8b}
Вообще - почему hitachi? Это же жесткий диск, как я понял... Каким он боком к флэшке? Или одно из устройств, которое будет перебираться в цикле и очередь дойдет и до флэшки? -
P (14.08.11 17:50) [4]А какая версия Delphi?CreateFile(PChar(@Devi...
Может в Unicode все дело? -
P (14.08.11 17:52) [5]В 7ке одно а в ХЕ это уже другое
-
Дмитрий Белькевич (14.08.11 19:50) [6]Не знаю, для какой версии Розыч писал, я пробую на 2010.
-
Дмитрий Белькевич (14.08.11 19:51) [7]Как я посмотрел, то с юникодом там всё чисто.
-
Дмитрий Белькевич (14.08.11 19:59) [8]Блин, посмотрел еще раз - таки да - юникод :)
Не там смотрел... -
Дмитрий Белькевич (14.08.11 20:03) [9]Сделал так:
hDrive := CreateFileA(PAnsiChar(@DeviceInterfaceDetailData.DevicePath[0]), -
Дмитрий Белькевич (14.08.11 20:12) [10]Спасибо всем за обсуждение, Розычу огромное спасибо за код.
-
P (14.08.11 20:23) [11]Дмитрий Белькевич (14.08.11 19:50) [6]
Не знаю, для какой версии Розыч писал, я пробую на 2010.
Наверное для 7, но ждем ответа Мастера -
Для справки. В поледних сборках FAR 2.0, который юникодный, в 1.75 не знаю, но должно быть, такая функция есть: Alt+F1(F2), Del на диске флеш. Исходники открыты.
-
Rouse_ © (14.08.11 22:29) [13]Да, писалось все для семерки и 2007-ой, еще не успел перевести пример на 2010 и выше с учетом юникода
ЗЫ: пока на сайте вообще только пять шесть примеров переведено - так что увы...