在C++中创建一个只有我的应用程序可以访问的文件

Creating a file accessible to only my application in C++?

本文关键字:应用程序 我的 文件 访问 一个 创建 C++      更新时间:2023-10-16

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

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

现在,由于问题似乎不是安全问题,而是保护用户免受自己的侵害,我只想将文件存储在足够"看不见"的位置并对此感到满意;将数据写入%APPDATA%yourappname 1,这样的目录专门用于用户特定的应用程序数据,不打算由用户直接接触。

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

  • 普通用户(我们的目标AFAICT(不会在appdata中弄乱,因为它一开始就是一个隐藏文件夹;
  • 闹的"高级用户",如果有足够的决心向自己的脚开枪(或自愿造成伤害(,就会找到一种方法,因为安全设置在您的情况下很容易规避(管理员可以拥有任何文件的所有权并更改其 ACL,并使用 Unlocker 等应用程序来规避文件锁定(;
  • 有正当理由访问文件的技术人员(例如,他必须获取/恢复文件的备份(将对所有这些无用的预防措施感到沮丧。

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

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

下面是一个 MSDN 示例

您需要为这些文件提供自己的文件扩展名,也许还需要其他安全措施(即文件密码(。如果您希望Windows建议这些文件,则必须对注册表进行一些工作。

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

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

至于防止数据被删除,冗余我的朋友冗余。与网络管理员讨论他们如何确保数据安全。我敢打赌,他们会把很多备份作为他们的原因之一。

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

你不能那样做。

如果用户有足够的决心,则可以删除

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

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

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

我建议在帮助文件中记录用户数据的位置,您可能应该将"!不要删除这个.txt"或其他东西放入此文件的文件夹中。

相关文章: