在C++中创建一个只有我的应用程序可以访问的文件
Creating a file accessible to only my application in C++?
我正在为一家小型办公室开发一个应用程序来维护他们的货币账户。我的应用程序可以帮助创建一个可以存储所有信息的文件。但是,除了在我的应用程序中之外,用户不应访问它。为什么?因为有人可能会删除文件,所有记录都会消失。环境是一台具有管理员权限的单个帐户的 Windows PC。我正在使用 MinGW 编译器在C++开发应用程序。我现在有点空白,至于如何创建这样的文件。有什么建议吗?
如果您的应用程序可以修改它,则运行它的凭据下的用户可以修改它,句号。此外,如果他具有管理员权限,则无法阻止他删除内容,即使您的应用程序在不同的凭据下运行并且文件受ACL保护也是如此。
现在,由于问题似乎不是安全问题,而是保护用户免受自己的侵害,我只想将文件存储在足够"看不见"的位置并对此感到满意;将数据写入%APPDATA%yourappname
1,这样的目录专门用于用户特定的应用程序数据,不打算由用户直接接触。
如果你想偏执,你可以启用你能找到的每一个安全设置(隐藏目录,在应用程序未运行时使用限制性ACL保护它,打开它进行独占访问,...(,但如果你问我这只是浪费时间:
- 普通用户(我们的目标AFAICT(不会在appdata中弄乱,因为它一开始就是一个隐藏文件夹; 胡
- 闹的"高级用户",如果有足够的决心向自己的脚开枪(或自愿造成伤害(,就会找到一种方法,因为安全设置在您的情况下很容易规避(管理员可以拥有任何文件的所有权并更改其 ACL,并使用 Unlocker 等应用程序来规避文件锁定(;
- 有正当理由访问文件的技术人员(例如,他必须获取/恢复文件的备份(将对所有这些无用的预防措施感到沮丧。
- 您可以通过展开相应的环境变量或通过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"或其他东西放入此文件的文件夹中。
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 无法通过编程方式确定我的应用程序使用的TLS版本
- 我可以在OpenFrameWorks中调用应用程序以外的其他内容
- 在我的Nexus 4上使用openCV和JNI的Android应用程序中的错误
- 我尝试运行我在 eclipse 中创建的 c++ 应用程序(它的.exe),它说"libgcc_s_dw2-1.dll丢失并尝试重新安装
- 如何将我的应用程序生成的标准 Mac OS X 日志输出重定向到文件
- 用C++创建一个写作应用程序(我的第一个项目)(学习C++)
- 我的应用程序创建的Windows CE/Embedded C++非易失性文件在重新启动时被删除
- 将除我的应用程序之外的所有应用程序静音
- 为什么我的SDL 2应用程序中的帧速率减半,除非我在某个位置移动鼠标
- 我尝试访问win32应用程序中的空指针值,但没有发生访问冲突
- 我什么时候需要一个无锁的数据结构来跨音频应用程序中的线程读取/写入数据
- 当应用程序没有从gdb运行时,我能得到应用程序崩溃的原因吗
- 如何找到内存使用我的android应用程序编写的c++使用NDK
- 我应该选择什么样的同步方案来避免在实时,c++ /MFC应用程序上的死锁
- 如何将此Boost ASIO示例应用于我的应用程序
- 为什么 Netbeans 无法识别我的C++应用程序中的forward_list