创建一个只能在C ++中访问我的应用程序的文件?

时间:2013-10-02 03:06:56

标签: c++ windows file

我正在开发一个小型办公室的申请来维持他们的货币账户。 我的应用程序可以帮助创建一个可以存储所有信息的文件。 但除了我的应用程序之外,用户不应该访问它。 为什么?因为有人可能会删除文件&所有的记录都会消失。 该环境是具有管理员权限的单个帐户的Windows PC。 我正在使用MinGW编译器在C ++中开发应用程序。 我现在有点空白,关于如何创建这样的文件。 有什么建议吗?

4 个答案:

答案 0 :(得分:4)

如果您的应用程序可以修改它,那么运行其凭据的用户可以修改它,句点。此外,如果他具有管理员权限,那么即使您的应用程序在不同凭据下运行且该文件受ACL保护,您也无法阻止他删除内容。

现在,由于这个问题似乎不是安全问题,而是保护用户不受自身影响,我只是将文件存放在一个“视线不足”的位置,并对此感到满意;在%APPDATA%\yourappname 1 中写入您的数据,这样的目录专门用于不打算由用户直接触摸的用户特定应用程序数据。

如果您想成为偏执狂,您可以启用您可以找到的每个安全设置(隐藏目录,在应用程序未运行时使用限制性ACL保护目录,打开它以进行独占访问,......),但如果您问我,这只是浪费时间:

  • 普通用户(我们的目标AFAICT)并没有弄乱appdata,因为它是一个隐藏的文件夹开头;
  • 迷惑的“超级用户”,如果有足够的决心在脚下射击(或自愿造成伤害),会找到一种方法,因为在您的情况下安全设置很容易被绕过(管理员可以取得所有权)任何文件并更改其ACL,并使用Unlocker之类的应用程序绕过文件锁定);
  • 有正当理由访问该文件的技术人员(例如,他必须采取/恢复该文件的备份)将受到所有这些无用预防措施的挫败。

  1. 您可以通过扩展相应的环境变量或通过SHGetFolderPath / SHGetKnownFolderPath(或者在新的Windows版本中为它发明的任何替代品)来获取实际的%APPDATA%路径。

答案 1 :(得分:1)

确保您的应用程序在Windows启动时加载并使用dwShareMode 0选项打开文件。

这是MSDN Example

答案 2 :(得分:0)

您需要为这些文件提供自己的文件扩展名以及其他安全措施(即文件密码)。如果您希望Windows建议这些文件,那么您将不得不使用注册表进行一些工作。

这是一个很好的资源,因为你只关心Windows:

http://msdn.microsoft.com/en-us/library/windows/desktop/ff513920(v=vs.85).aspx

至于保持数据不被删除,冗余我的朋友冗余。与网络管理员讨论如何确保数据安全。我敢打赌他们将许多备份命名为他们的原因之一。

答案 3 :(得分:0)

  

但除了我的应用程序之外,用户不应该访问它。

你做不到。

如果用户有足够的决心,可以删除机器用户上存在的所有物理访问权限。

您可以保护文件在运行时不被删除 - 在Windows上,您无法删除打开的文件。保持文件打开,人们不会在程序运行时删除它。相反,它们将通过任务管理器终止您的程序并删除该文件。

要不然,或者你可以把它上传到某个地方。用户无法轻易删除不在物理可访问设备上的数据。但是,有人必须运行服务器(并处理安全性+可能写入服务器软件)。在你的情况下,它可能不值得。

我建议在帮助文件中记录用户数据的位置,你应该把“!不要删除this.txt”或其他东西放到这个文件的文件夹中。