【问题标题】:How could I prevent a folder from being created using a windows service?如何防止使用 Windows 服务创建文件夹?
【发布时间】:2010-03-10 05:33:35
【问题描述】:

我在 Web 服务器上有用户和进程。我正在寻找一个能够拦截调用以在特定子目录中创建文件夹的 Windows 服务。我发现有几个来源可以被动地捕获文件夹已创建,但我想创建一个 Windows 服务,该服务将主动拦截并抢占任何不可接受的创建文件夹的调用。

让我先讨论一下“为什么”。不要费心问为什么。只要说我被要求这样做就足够了,我正在尝试找到以自动化方式完成任务的最简单方法。我已经确定了如何完成它,如果我让文件夹被创建然后跟随我的 Windows 服务并在事后删除它(及其内容)。我真的很想要一个可以让服务监听和抢占的事件。

【问题讨论】:

  • 您在第一句话中说的是“网络服务”……是不是打错字了?
  • 如何定义“创建文件夹的不可接受调用”?
  • @Dancrumb:是的。谢谢你的收获。我通常使用 Web 服务,所以我的手指只是去记忆。
  • @John:这并不真正相关。无论要求的权威确定什么在业务规则引擎中都是不可接受的。我想“捕捉”事件,向引擎发送信息,接收 y/n 状态,然后允许/禁止该操作。

标签: .net file-io windows-services


【解决方案1】:

不幸的是,我对如何帮助你的了解还不够,但我很确定你需要写或获得一个可以与你交流的File System Filter Driver您的 Windows 服务告诉它有人尝试创建一个目录/文件,以便您的服务可以为它做出决定。这样,当某人/某物尝试创建不允许的文件或文件夹时,他们可能会返回“拒绝访问”或您选择的另一个 Win32 错误。

如果您确实走上了使用驱动程序的路线,我想最好还是繁重来决定是否在服务中创建/修改,即在外部内核模式。

【讨论】:

  • @Rob:我不喜欢这样。看起来不好玩。我越不喜欢它,就越有可能这是最好的方法。
  • 是的,不好玩。尝试估计它也应该很有趣。
  • @Joel,该评论值得 QOTD! ;)
【解决方案2】:

不确定您是否会找到“预创建文件”拦截点。如果我是你,我会推后并锁定文件夹上的安全设置。如果它真的只是一个文件夹并且您在 Windows 上运行,您可以设置安全性以防止每个人在该目录中创建文件夹。只要确定那是你想要做的。

然后操作系统会在你根本不编写任何代码的情况下完成它。

如果您出于某种原因确实必须自己编写代码,也许安全路径中有一个调用,您可以将代码注入其中。

【讨论】:

  • @NO Refunds:我想过这个问题,但我不想禁用所有创建,只禁用不符合规则引擎确定的业务规则标准的创建(我不控制)。
  • 我认为可能失败的创建会出现在事件日志中。 (他们似乎没有,至少默认情况下是这样。)如果他们这样做了,您可以使用访问控制将它们锁定,监控失败尝试的日志,然后您的服务可以创建您想要允许的唯一目录。哦,好吧。
【解决方案3】:

【讨论】:

  • @Rune:我喜欢那个链接。非常有用,但它仍然是被动的。我没有真正的方法向尝试方抛出 UnauthorizedAccessException。这仍然是事后的“清理”。不过,这看起来比我最初的想法更好,所以如果我最终走这条路,我肯定会使用它。
  • FileSystemWatcher 必须有一个“创建”事件,以便 OP 以他们要求的方式使用它。一旦“Created”事件触发,就为时已晚。
【解决方案4】:

您的用户如何创建新文件夹?是否有固定的方式(IE:右键单击,新建>文件夹)或者他们是否按照资源管理器 UI 允许的方式进行操作?我问是因为一个想法是为右键单击功能(类似于 WinRar)构建一个加载项,该加载项旨在使用您指定的参数创建一个新文件夹。

这只有在他们都使用完全相同的方法来创建新文件夹时才有效。无需 Windows 服务即可。

【讨论】:

  • @rockinthesixstring:我被要求确保即使是自动化服务(例如 IIS,其他较低优先级的 Windows 服务)也不允许创建文件夹。这可以通过资源管理器、托管代码、非托管代码、FTP。可能更多。
  • 听起来是个挑战。想不出拦截的方法,只能跟着走。如果创建、删除无效文件夹并生成弹出通知。虽然我以前被认为是错误的。
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多