如何防止文件被复制或剪切在windows文件系统?

dy2hfwbg  于 2023-01-27  发布在  Windows
关注(0)|答案(6)|浏览(251)

我希望一个exe文件不能复制或从Windows文件系统剪切粘贴到某处。
该exe是在C#。这必须是在只有一台PC。
我使用过FileSystemWatcherNSISClipboard。但我需要检测是否正在复制该文件。
我也见过“防止”(http:free-download-blog.comdisable-cut-paste-copy-delete-rename-functions-using-prevent),但我只需要防止复制或剪切特定的exe
任何指针或想法都会有帮助。

bjp0bcyl

bjp0bcyl1#

正如其他人所建议的那样,你不能这么容易地禁用复制/剪切行为。
另一种方法是禁止执行复制的版本
在您的可执行文件中,您可以检查许多内容,如:

  • 当前可执行文件的路径显式为your_path
  • 机器和用户的名称是您授权的名称

你甚至可以使用Windows注册表项来防止文件被执行超过一次(如果已经有一个不启动)。这不会是完美的,因为任何实验用户都可以调整它,假设他们正在寻找它。但根据你的用户配置文件,这可能是足够的。

qacovj5a

qacovj5a2#

如果您需要exe可执行,则需要允许将其加载到内存中。一旦您这样做,任何人都可以使用ReadFile将其读取到内存中,然后使用WriteFile将其写入任意位置。不涉及shell可检测的复制。
一本好读物:Raymond's post and its comments on preventing copying.

ubof19bj

ubof19bj3#

好吧,这是一个难题。即使你让explorer.exe禁用剪切和粘贴,是什么阻止用户使用命令窗口呢?还是阻止用户编写自己的exe来做这件事呢?在linux中引导并阅读它呢?
不过,你有几个选项(将有更多,最有可能),你可以尝试:

  • 使用正确的权限:设置权限,使您不想剪切和粘贴的用户无法读取该文件。
  • 编写一个设备驱动程序,它可以挂钩到文件系统调用,并为您做这件事。
  • 加密文件。

以及一些常见的选项,如:

  • 使用APPINIT_DLLS注册表项将您自己的dll加载到每个进程中(我不确定这是否适用于控制台进程)。然后在您的dll加载时,执行IAT挂钩以替换kernel32.dll文件调用。
  • 用你自己的版本替换kernel32.dll。可能要对PE格式做一些改动等等。

不过这并不能保证。例如,如果你期望他们能够执行它,但不能复制它,你可能会卡住。

ioekq8ef

ioekq8ef4#

任何本地管理员都可以撤销你为防止复制而做的任何事情。我几乎可以保证你提到的那个页面上的程序依赖于一个服务或后台进程来防止复制和粘贴,因此很容易被规避。如果你的用户处于一个封闭的环境中,没有一个人是管理员,他们对自己的电脑的权限非常有限,那么你就有机会。

3mpgtkmj

3mpgtkmj5#

如果你可以完全阻止资源管理器复制或移动文件,那么你所需要的就是一个第三方软件来复制文件(但是要确保它可以过滤文件扩展名),例如复制处理程序

0kjbasz6

0kjbasz66#

在计算机中设置环境变量
在代码中添加检查if(ENVIRONMENT Variable=='Same as defined')//执行代码else //暂停执行

相关问题