none
Перехват и отключение флеш карты RRS feed

  • Общие обсуждения

  • Добрый день... Поднимаю давний вопрос: 
    Перехват и отключение флеш карты (с последующим включением (естественно программно) ) 

    Итак пробовал вот эти два варианта: 
    1) 
    // Получение доступа к носителю и запись в свободную позицию массива 
    hDevice = CreateFile("\\\\.\\H:", 
    GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 
    0, OPEN_EXISTING, 0, 0); 

    // Отправка команды блокировки на носитель записанный в массив 
    DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 
    0, &lpBytesReturned, 0); 

    // Отправка команды размонтирование носителю 
    DeviceIoControl(hDevice, FSCTL_DISMOUNT_VOLUME, NULL, 0, 
    NULL, 0, &lpBytesReturned, 0); 

    Способ работает, но слишком медленно выполняется отключение диска, к примеру подключаю флешку после этой команды она может отрубиться за 3 - 7 секунд (это очень медленно), пробовал на маломощном компе, так там ещё медленнее.. 
    Я перехватываю появления флешки и потом сразу отрубаю его, но так как времени много надо на отруб, то и пользователь может успеть что надо записать и вирус может выбраться из флешки... 

    2) 

    HANDLE hVol; 
    BOOL res; 
    char *volname; 
    volname = "\\\\.\\H:"; 

    hVol = CreateFile(volname, GENERIC_READ || GENERIC_WRITE, FILE_SHARE_READ || FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); 

    DWORD nBytesReturned = 0; 
    res = DeviceIoControl(hVol,IOCTL_STORAGE_EJECT_MEDIA , NULL, 0, NULL, 0, &nBytesReturned, NULL); 

    Способ хороший, вырубает диск сразу при подключении, но только действует на флеш карты, почему то внешний хард не вырубил... И программное подключение диска не работает. Диск вернуть возможно после закрытия программы... 

    Если у кого какой либо хороший способ отключить / подключить диск программно, что бы это было молниеносно.. 
    Плиз... 

     

    А да коечто ещё, каким образом можно закрыть все взаимодействия с диском, так как это делает chkdsk.

    Прием я нахожусь на диске (explorer)

    Запускаю chkdsk на это диск, то меня выбрасывает их explorer'a 

    Я думаю если закрыть все взаимодействия с диском то блокировка его ускориться...

    PS 
    Пишу на великом и могучем C++ 

    10 января 2011 г. 8:09

Все ответы

  • Попробуйте продублировать вопрос на англоязычном msdn. Там больше людей тусуется.
    E-mail: Svatoslav.Pankratov@gmail.com
    10 января 2011 г. 20:46
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    19 января 2011 г. 12:09