0

我有一个共享文件夹,我只想在某些时候向少数人授予访问权限。即当他们尝试访问该文件夹时,我应该能够根据我的意愿允许或拒绝。简而言之,它的运行时访问控制,而不是 Windows 中已经存在的静态访问控制。是否有这样的挂钩 exe 的规定?我更喜欢在 C# .net 中执行此操作

4

4 回答 4

1

所以要完成这样的任务,我会使用 NTFS 的 ACL。是的,它是“硬编码”的,并且在有人访问文件时无法更改。但是您可以编写一个 Windows 服务,该服务将根据您的喜好动态更改 ACL。

因此,编写一个更改 ACL 的程序,其余的由 windows 完成。在 C# 中执行此类任务的一些示例可以通过谷歌搜索找到:

更新

要授予或拒绝权限,您需要一个规则集。可以在您的应用程序中检查这些规则,这会设置 NTFS 权限。什么不见​​了?

也许您没有这种简单的方法来获取有关“用户正在访问文件/文件夹 foo,我该怎么办?”的事件。但是您可以每秒(如果您愿意)或根据事件(创建、复制、删除、重命名文件/文件夹;达到特定日期/时间)生成一个新规则集,然后将其烧录到 ACL 中。完成的。

更新(再次)

@Ravisha:但是,如果您授予或拒绝访问权限,您什么时候知道规则?这些规则是预先定义的。

你说用户 X 只能从上午 8 点到下午 15 点访问,或者只有在文件 y 存在时(或者文件 y 中写入了一些特殊的东西)。对于所有这些规则,您必须编写一个程序,如果您收到事件“x 正在尝试访问 y”,则该程序不会评估规则。相反,您会定期检查规则(例如每分钟一次)或其他一些事件(文件 rules.config 已更改)。然后根据您的规则更改 NTFS 权限。

也许这不是完美的解决方案。但是你可以在 Windows 中完成的最简单的一个。如果你真的喜欢硬着头皮做,你可以看看File System Filter Drivers。但这是一项艰巨的任务,与托管代码相去甚远。

于 2010-03-01T09:35:01.843 回答
0

如果 rootkit 可以做到,那么您也可以。但我不认为你想去那里。

为什么不将所有文档放入某种文件中,扩展名由您控制。如果您双击文件,winzip/explorer/... 之类的界面将允许您访问文件柜中的文件,但前提是您愿意。

于 2010-03-02T08:42:33.117 回答
0

The access control is checked when a user tries to perform a file operation on a file in the folder, so you should not need to have any additional run-time checks.

Also, Windows doesn't include a "hook" facility to allow or deny access to a folder by running a program when access is attemped.

于 2010-03-01T07:36:30.083 回答
0

您可能可以包含一个 autorun.inf 文件,该文件将在文件夹打开和关闭资源管理器窗口中运行您的应用程序/当不允许有人进入时向上导航。详情看这里

于 2010-03-01T08:30:31.177 回答