Как не блокировать безопасное извлечение флешки?

Тема в разделе "WASM.WIN32", создана пользователем Rel, 18 окт 2018.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    есть программа, которая читает файлы с флешки, много файлов... для программы нет принципиального значение, если пользователь захочет вытащить флешку... но пока происходит поиск и чтение файлов безопасно извлечь флешку не позволяет сисиема... внимание вопрос, как искать файлы и читать их так, чтобы не блокировать пользователю возможность ее безопасно извлечь? и да, все происходит в юзермоде, если это важно...
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да, но у меня проблема в том, что я блокирую безопасное извлечение флешки, когда ЧИТАЮ файлы с нее или ПОЛУЧАЮ СПИСОК файлов из директории... отключать кеширования пользователю мне не надо... я ничего не записываю туда... мне нужно, как то ЧИТАТЬ и ПОЛУЧАТЬ СПИСОК файлов таким образом, чтобы пользователь мог безопасно извлекать флешку в любое время, а моя программа просто получала ошибку чтения или что-то в этом духе...
     
  4. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Может быть, просто закрывать файловые дескрипторы после чтения или по таймауту?
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    все дескрипторы закрываются после того, как чтение завершено...
    --- Сообщение объединено, 22 окт 2018 ---
    альтернативно, как мне отловить событие, когда пользователь попытался безопасно извлечь флешку? возможно я мог бы, отловив это событие, прибить поток чтения и закрыть все открытые хендлы и буфферы с данными? и успеть до того, как пользователю вернется ошибка...
     
    Последнее редактирование: 22 окт 2018
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Перехватывать в explorer.exe DeviceIoControl с IOCTL_STORAGE_EJECT_MEDIA? :declare:
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    не, городить инжект кода в легитимном софте как то не айс...
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Тогда RegisterDeviceNotificationA с DBT_DEVICEQUERYREMOVEFAILED наверное поможет: ловишь событие неудачного извлечения флешки, проверяешь твоя ли эта флешка, гасишь тред и инициируешь безопасное извлечение сам.
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    в итоге сделал через сообщение WM_DEVICECHANGE с DBT_DEVICEQUERYREMOVE, судя по всему сообщение синхронное, пока не вернешь управление из WndProc фейла не случается, так что у меня есть все время этого мира, чтобы остановить поток и прикрыть все открытые хендлы... всем неравнодушным спасибо за помощь!