Резервное копирование и восстановление зашифрованных файлов

Шифрованная файловая система (EFS) фильтрует открытие зашифрованного файла таким образом, чтобы приложение, открывающее файл, получало доступ к незашифрованной информации при условии, что оно, конечно, имеет соответствующие учетные данные для доступа к файлу и получения ключа, необходимого для расшифровки файла. Последующие операции чтения с этим файлом будут возвращать незашифрованный текст. Это очень желательно для типичного доступа к зашифрованным файлам и обеспечивает прозрачность шифрования и расшифровки файлов. Однако это препятствует резервному копированию зашифрованных файлов, так как при попытке резервного копирования с помощью стандартных вызовов файлового ввода-вывода, таких как CreateFile, ReadFile и WriteFile, резервные копии файлов будут иметь версию обычного текста.

Для решения этой проблемы предоставляются необработанные функции шифрования. Приложения резервного копирования являются основными пользователями для этих функций. Необработанные функции шифрования отличаются от других функций файловой системы тем, что функции открытия, чтения и записи обеспечивают доступ к необработанным зашифрованным потокам данных, а также чтение и запись потока $EFS. Поэтому вызывающей функции необработанного шифрования не требуется доступ к криптографическим ключам, которые расшифровывают файл. Следующие API необработанного шифрования доступны для использования с приложениями резервного копирования и восстановления:

API необработанного шифрования Описание
OpenEncryptedFileRaw Откройте зашифрованный файл с доступом к данным в зашифрованном формате. Если вызывающий объект не имеет доступа к ключу для файла, ему требуется SeBackupPrivilege для экспорта зашифрованных файлов или SeRestorePrivilege для импорта зашифрованных файлов.
CloseEncryptedFileRaw Закрытие зашифрованного файла, открытого с помощью OpenEncryptedFileRaw
ReadEncryptedFileRaw Чтение зашифрованного файла, оставив его данные в зашифрованном формате
WriteEncryptedFileRaw Запись зашифрованного файла, оставив его данные в зашифрованном формате
ImportCallback Определяемый приложением обратный вызов для использования с WriteEncryptedFileRaw
ExportCallback Определяемый приложением обратный вызов для использования с ReadEncryptedFileRaw