Уважаемые коллеги,помогите пожалуйста! Написан минифильтр-драйвер файловой системы, для прерывания команд на открытие, создание, переименование и удаление файлов. Принцип работы следующий — если операция подпадает под заданные условия, ее выполнение блокироется через возврат FLT_PREOP_PENDING в FLT_PRE_OPERATION_CALLBACKе. После этого информация о событие передается в верхнеуровневое приложение, которое через некоторое время (секунды, возможно минуты) возвращает решение(разрешить/запретить) по данному событию драйверу. Драйвер, получив эту информацию в случает запрета завершает операцию со статусом запрета Код (Text): Data->IoStatus.Status = STATUS_ACCESS_DENIED; FltCompletePendedPreOperation( Data, FLT_PREOP_COMPLETE, NULL ); а в случае разрешения продолжает операцию Код (Text): FltCompletePendedPreOperation( Data, FLT_PREOP_SUCCESS_NO_CALLBACK, NULL ); Все операции работают исправно, кроме удаления файла через explorer.exe: при разрешении отложенного запроса на удаление файл не удаляется, возвращается ошибка INVALID HANDLE. При этом, например, при удалении через Far и ряд анинсталлеров такой проблемы нет. Предположил, что эксплорер шлет CancelIrp. Для проверки использовал функцию FltSetCancelCompletion, которая по идее должна назначить функцию на отмену I/O операции. Вызывал ее в операции удаления файла, Код (Text): status = FltSetCancelCompletion( Data, SetInfoCancelCallback); однако вызов этой функции не произошел. Значит explorer CancelIrp не вызывает. Что же тогда это может быть?