Проблема блокировки удаления файла через explorer
От: URrik81  
Дата: 01.07.10 14:31
Оценка:
Уважаемые коллеги,помогите пожалуйста!
Написан минифильтр-драйвер файловой системы, для прерывания команд на открытие, создание, переименование и удаление файлов.
Принцип работы следующий — если операция подпадает под заданные условия, ее выполнение блокироется через возврат FLT_PREOP_PENDING в FLT_PRE_OPERATION_CALLBACKе.
После этого информация о событие передается в верхнеуровневое приложение, которое через некоторое время (секунды, возможно минуты) возвращает решение(разрешить/запретить) по данному событию драйверу.
Драйвер, получив эту информацию в случает запрета завершает операцию со статусом запрета

Data->IoStatus.Status = STATUS_ACCESS_DENIED;
FltCompletePendedPreOperation( Data, FLT_PREOP_COMPLETE, NULL );


а в случае разрешения продолжает операцию

FltCompletePendedPreOperation( Data, FLT_PREOP_SUCCESS_NO_CALLBACK, NULL );


Все операции работают исправно, кроме удаления файла через explorer.exe: при разрешении отложенного запроса на удаление файл не удаляется, возвращается ошибка INVALID HANDLE. При этом, например, при удалении через Far и ряд анинсталлеров такой проблемы нет.

Есть предположение, что эксплорер шлет CancelIrp. Так ли это? И как можно решить эту проблему?
А может проблема в другом?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.