如何防止在Windows文件系统中复制或剪切文件?

时间:2010-02-18 07:37:58

标签: windows filesystems copy-paste

我希望无法从Windows文件系统复制或剪切exe文件以粘贴到某处。

exe是用C#编写的。必须只能在一台PC上。

我使用过 FileSystemWatcher NSIS 剪贴板。但是对于所有我需要检测是否正在复制该文件。

我也看过'Prevent'(http www free-download-blog.com disable-cut-paste-copy-delete-rename-functions-using-prevent),但我只需要阻止那个特别的 exe 被复制或删除。

任何指针或想法都会有所帮助。

6 个答案:

答案 0 :(得分:2)

如果您需要exe可执行,则需要允许将其加载到内存中。 一旦你这样做,任何人都可以使用ReadFile将其读入内存,然后使用WriteFile写入任意位置。不涉及shell可检测的复制。

好读:Raymond's post and its comments on preventing copying

答案 1 :(得分:1)

嗯,这是一个难题。即使你让explorer.exe禁用剪切和粘贴,是什么阻止用户使用命令窗口?还是写自己的exe来做呢?在linux中启动并阅读它?

不过,您可以尝试一些选项(可能会有更多,更有可能):

  • 使用正确的权限:设置 权限使用户 你不想剪切和粘贴不能 阅读文件。

  • 编写可以挂钩的设备驱动程序 到文件系统调用并执行此操作 对你而言。

  • 加密文件。

还有一些hacky选项,如:

  • 使用APPINIT_DLLS regkey将您自己的dll加载到每个进程中(我不确定这是否适用于控制台进程)。然后在你的dll加载,IAT挂钩替换kernel32.dll文件调用。

  • 将kernel32.dll替换为您自己的版本。可能需要对PE格式等进行一些处理。

虽然没有保证。例如,如果您希望它们能够执行它,但不能复制它,那么您可能会陷入困境。

答案 2 :(得分:1)

正如其他人所说,你不能轻易地禁用复制/剪切行为。
另一种方法是禁用复制版本的执行
在您的可执行文件中,您可以查看许多内容,例如:

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

您甚至可以使用Windows注册表项阻止执行文件多次(如果已经1次不启动)。它不会是完美的,因为任何实验用户都可以调整它,假设他们正在寻求这个。但是,根据您的用户资料,这可能就足够了。

答案 3 :(得分:0)

任何本地管理员都可以撤消您为防止复制而执行的任何操作。我几乎可以保证你提到的那个页面上的程序依赖于服务或后台进程来防止复制和粘贴,因此很容易绕过。如果您的用户处于一个封闭的环境中,他们都不是管理员,并且他们对PC的权限非常有限,那么您就有机会。

答案 4 :(得分:0)

如果您可以完全阻止资源管理器复制或移动文件,那么您需要的是用于复制文件的第三方软件(但请确保它可以过滤文件扩展名),例如Copy Handler

答案 5 :(得分:0)

在您的机器中设置环境变量

在您的代码中添加一项检查 if(环境变量=='与定义相同') //执行代码 其他 //暂停执行