есть программа, которая читает файлы с флешки, много файлов... для программы нет принципиального значение, если пользователь захочет вытащить флешку... но пока происходит поиск и чтение файлов безопасно извлечь флешку не позволяет сисиема... внимание вопрос, как искать файлы и читать их так, чтобы не блокировать пользователю возможность ее безопасно извлечь? и да, все происходит в юзермоде, если это важно...
Как отключить кэширование полный гугл советов http://vindavoz.ru/poleznoe/212-bezopasnoe-izvlechenie-ustroystva-a-nuzhno-li.html К чему это иногда может привести https://habr.com/post/98339/
да, но у меня проблема в том, что я блокирую безопасное извлечение флешки, когда ЧИТАЮ файлы с нее или ПОЛУЧАЮ СПИСОК файлов из директории... отключать кеширования пользователю мне не надо... я ничего не записываю туда... мне нужно, как то ЧИТАТЬ и ПОЛУЧАТЬ СПИСОК файлов таким образом, чтобы пользователь мог безопасно извлекать флешку в любое время, а моя программа просто получала ошибку чтения или что-то в этом духе...
все дескрипторы закрываются после того, как чтение завершено... --- Сообщение объединено, 22 окт 2018 --- альтернативно, как мне отловить событие, когда пользователь попытался безопасно извлечь флешку? возможно я мог бы, отловив это событие, прибить поток чтения и закрыть все открытые хендлы и буфферы с данными? и успеть до того, как пользователю вернется ошибка...
Тогда RegisterDeviceNotificationA с DBT_DEVICEQUERYREMOVEFAILED наверное поможет: ловишь событие неудачного извлечения флешки, проверяешь твоя ли эта флешка, гасишь тред и инициируешь безопасное извлечение сам.
в итоге сделал через сообщение WM_DEVICECHANGE с DBT_DEVICEQUERYREMOVE, судя по всему сообщение синхронное, пока не вернешь управление из WndProc фейла не случается, так что у меня есть все время этого мира, чтобы остановить поток и прикрыть все открытые хендлы... всем неравнодушным спасибо за помощь!