Открытие файла с полными правами доступа Программа fop позволяет открывать заданные файлы с полными правами доступа, а также открывать файлы заблокированные другими программами. Программа использует такой способ: Даже если файл открыт другой программой и при открытии указан ShareMode none, файл все равно можно открыть, если указать как DesiredAccess FILE_READ_ATTRIBUTES (у меня ни разу не случалось, чтобы файл не удавалось так открыть). После этого необходимо изменить права доступа полученного хэндла, чтобы с его помощью можно было читать/записывать. Для этого надо найти по значению handle-а соответствующую ему структуру в таблице handle-ов процесса. Формат таблиц хэндлов отличается в windows 2000 и windowsXP/server2003, поэтому процедура поиска получается разная для разных версий windows. Структуру таблиц handle-ов можно найти в интернете. В исходниках программы можно посмотреть windrv\handle_access.c, функция lookup_handle_table_entry возвращает указатель на HANDLE_TABLE_ENTRY. В этой структуре нужно установить поле GrantedAccess в 0x1f01ff (ALL_ACCESS). После этого можно будет читать/писать в файл используя этот handle. В программе fop драйвер перехватывает системные вызовы NtCreateFile и NtOpenFile, используя замену функции обработчика в таблице KeServiceDescriptorTable. Для каждого вызова этих функций установленный обработчик проверяет имя и, если оно среди заданных, то вызывает реальный NtCreateFile/NtOpenFile, передавая ему как DesiredAccess FILE_READ_ATTRIBUTES, а затем устанавливает полученному handle полные права. Этот метод хорошо работает в XP, но на Server 2003 - не работает. Получается открыть handle c полными правами, но чтение/запись через этот handle выполнить не удается. Видимо, в Server 2003 применяется какой-то еще способ контроля прав доступа через открытые handle.