Обработка зашифрованных файлов и каталогов
Программист или пользователь могут отметить каталог или файл как зашифрованный. Отмеченный так файл зашифровывается NTFS, используя текущий драйвер шифрования. Если файл позже отмечается как не зашифрованный, он расшифровывается и оставляется в незащищенном состоянии открытого (незашифрованного) текста.
Каталоги сами по себе не шифруются. Скорее, по умолчанию, в "зашифрованном" каталоге все новые файлы при создании шифруются. Пользователь должен специально изменить статус нового файла в расшифрованный, если не хочет, чтобы файл шифровался. Зашифрованный каталог - видимый. Чтобы каталог сделать недоступным другим пользователям, используйте стандартные методы управления доступом.
Чтобы зашифровывать файл, используйте функцию CreateFile с флажком FILE_ATTRIBUTE_ENCRYPTED. Чтобы зашифровать существующий файл, используйте функцию EncryptFile. Все потоки данных в файле шифруются. Если файл уже зашифрован, EncryptFile ничего не делает, а только возвращает ненулевое значение, которое обозначает успешное завершение. Если файл является сжатым, EncryptFile перед шифровкой разворачивает его.
Чтобы расшифровывать зашифрованный файл, используйте функцию DecryptFile. Если файл не зашифрован, DecryptFile ничего не делает, а только возвращает ненулевое значение, указывающее на успешное завершение.
Функция EncryptionDisable запрещает или разрешает шифрование обозначенного каталога и файлов в нем. Она не влияет на шифрование подкаталогов, которые ниже обозначенного каталога.
Чтобы извлечь статус шифрования файла, используйте функцию FileEncryptionStatus. Или вызовите функцию GetFileAttributes и проверьте флажок FILE_ATTRIBUTE_ENCRYPTED в возвращаемом значении.
Когда зашифрованные файлы копируются, используя функции CopyFile и CopyFileEx в среде Windows 2000, они пытаются зашифровать получившийся файл. Не делается какой-либо попытки , чтобы зашифровать выходной файл с ключами, используемыми в шифровании исходного файла. Если файл не может шифроваться, CopyFile и CopyFileEx завершают операцию копирования, не шифруя выходной файл.
В Windows XP, функции CopyFile и CopyFileEx пытаются зашифровать получившийся файл с ключами, используемыми в шифровании исходного файла. Если это не может быть сделано, обе функции пытаются зашифровать выходной файл с заданными по умолчанию ключами, как в Windows 2000. Если оба из этих методов не могут быть реализованы, CopyFile и CopyFileEx завершают работу ошибкой ERROR_ENCRYPTION_FAILED. Если Вы хотите, чтобы CopyFileEx завершила операцию копирования, даже тогда, когда выходной файл не может шифроваться, в своем вызове CopyFileEx в параметр dwCopyFlags включите значение COPY_FILE_ALLOW_DECRYPTED_DESTINATION.