C++ 创建只读不可删除文件

C++ 创建只读不可删除文件,c++,c,winapi,C++,C,Winapi,我试图创建一个不可删除且只读的文件。(这是一个exe,所以可能我也需要执行。) 我试图通过以下方式实现这一目标: SetFileAttributes(My_File_Path,FILE_ATTRIBUTE_READONLY); 但它只保护不被写入(它允许读取但不写入),而防止被删除它什么也不做,即使根据MSDN,它也应该保护不被删除: 只读的文件。应用程序可以读取该文件,但不能写入或删除该文件。此属性在目录上不受尊重。有关详细信息,请参阅“在Windows Server 2003、Window

我试图创建一个不可删除且只读的文件。(这是一个exe,所以可能我也需要执行。)

我试图通过以下方式实现这一目标:

SetFileAttributes(My_File_Path,FILE_ATTRIBUTE_READONLY);
但它只保护不被写入(它允许读取但不写入),而防止被删除它什么也不做,即使根据MSDN,它也应该保护不被删除:

只读的文件。应用程序可以读取该文件,但不能写入或删除该文件。此属性在目录上不受尊重。有关详细信息,请参阅“在Windows Server 2003、Windows XP或Windows Vista中无法查看或更改文件夹的只读或系统属性”

如何防止文件被删除

  • 文件系统是NTFS
  • 这是为了保护。这些文件是供孩子们使用的,我想阻止他们删除该文件。(或者,尽量使删除变得困难。)
  • 我正在寻找一个程序化的解决方案

删除文件实际上是目录更改,而不是文件更改。如前所述,您不能使用属性,您需要完整的NTFS访问控制列表(ACL)。特别是,您需要的是一个

  • 否认
  • 每个人
  • 修改整个目录的权限
  • 您可以选择使用属性为ACL添加另一个ACE前缀

  • 允许
  • 你自己
  • 修改整个目录的权限

  • ACL上的ACE是按顺序处理的,因此这可以防止您锁定自己。

    为什么要这样做?您是否正在编写恶意软件?就写入或删除文件而言,程序可以轻松删除该属性。如果删除只读文件,则假定首先删除该文件的程序是c了解只读属性。USB驱动器上的文件系统是什么?只读保护不是一种安全功能。它可以防止意外覆盖,但不能阻止蓄意攻击。您必须找到其他解决方案。如果驱动器是NTFS,您可以设置权限。但其他计算机上的任何管理员都可以覆盖加密可能有助于保护文件。Bit locker也可能有帮助。它们超出了基本文件属性。