Уважаемые коллеги,помогите пожалуйста!
Написан минифильтр-драйвер файловой системы, для прерывания команд на открытие, создание, переименование и удаление файлов.
Принцип работы следующий — если операция подпадает под заданные условия, ее выполнение блокироется через возврат 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. Так ли это? И как можно решить эту проблему?
А может проблема в другом?