Конференция "WinAPI" » Безопасное извлечение флэшки. Отключить флэш по букве тома.
 
  • Дмитрий Белькевич (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, но ждем ответа Мастера
  • Inovet © (14.08.11 20:39) [12]
    Для справки. В поледних сборках FAR 2.0, который юникодный, в 1.75 не знаю, но должно быть, такая функция есть: Alt+F1(F2), Del на диске флеш. Исходники открыты.
  • Rouse_ © (14.08.11 22:29) [13]
    Да, писалось все для семерки и 2007-ой, еще не успел перевести пример на 2010 и выше с учетом юникода
    ЗЫ: пока на сайте вообще только пять шесть примеров переведено - так что увы...
 
Конференция "WinAPI" » Безопасное извлечение флэшки. Отключить флэш по букве тома.
Есть новые Нет новых   [119014   +23][b:0.001][p:0.002]