处理加密文件和目录

程序员或用户可以将目录或文件标记为已加密。 标记为已加密的文件由 NTFS 文件系统使用当前加密驱动程序进行加密。 如果稍后将文件标记为未加密,则会将其解密并保留为纯文本 (不安全) 状态。

目录本身未加密。 默认情况下,在“加密”目录中,目录中的所有新文件在创建时都会加密。 如果用户不希望对文件进行加密,用户必须专门将新文件的状态更改为“已解密”。 加密目录可见。 若要使目录对其他用户不可访问,请使用标准访问控制方法。

加密函数不能与 备份 API 一起使用。

若要加密新文件,请使用带 FILE_ATTRIBUTE_ENCRYPTED 标志的 CreateFile 函数。 若要加密现有文件,请使用 EncryptFile 函数。 文件中的所有数据流都已加密。 如果文件已加密, EncryptFile 不会执行任何操作,只返回一个非零值,该值指示成功。 如果文件已压缩, EncryptFile 会在加密文件之前解压缩该文件。

若要解密加密的文件,请使用 DecryptFile 函数。 如果文件未加密, DecryptFile 将返回指示成功的非零值,但不会执行任何操作。

EncryptionDisable 函数禁用或启用所指示目录及其中的文件的加密。 它不会影响指定目录下的子目录的加密。

若要检索文件的加密状态,请使用 FileEncryptionStatus 函数。 或者,调用 GetFileAttributes 函数并检查返回值中的 FILE_ATTRIBUTE_ENCRYPTED 标志。

CopyFileCopyFileEx 尝试使用源文件加密中使用的密钥加密目标文件。 如果无法执行此操作,这两个函数都会尝试使用默认密钥加密目标文件。 如果这两种方法都无法完成, 则 CopyFileCopyFileEx 将失败并 出现ERROR_ENCRYPTION_FAILED 错误。 如果希望 CopyFileEx 在目标文件无法加密的情况下完成复制操作,请在对 CopyFileEx 的调用中将 COPY_FILE_ALLOW_DECRYPTED_DESTINATION 标志包含在 dwCopyFlags 参数的值中。