问题标签 [ntfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10543 浏览

python - 使用python检查文件夹/文件ntfs权限

正如问题标题可能暗示的那样,我非常想知道检查给定文件或文件夹的 ntfs 权限的方法(提示:这些是您在“安全”选项卡中看到的那些)。基本上,我需要的是获取文件或目录的路径(在本地机器上,或者最好在远程机器上的共享上)并获取用户/组列表以及此文件/文件夹的相应权限. 最终,应用程序将遍历目录树,读取每个对象的权限并相应地处理它们。

现在,我可以想到多种方法来做到这一点:

  • 解析 cacls.exe 输出 - 很容易完成,但是,除非我遗漏了什么,否则 cacls.exe 仅以 R|W|C|F(读/写/更改/完整)的形式提供权限,这是不够的(我需要获得“列出文件夹内容”等权限,也需要扩展权限)
  • xcacls.exe 或 xcacls.vbs 输出——是的,它们给了我所需的所有权限,但它们的工作速度非常慢,xcacls.vbs 大约需要一秒钟才能获得本地系统文件的权限。这样的速度是不能接受的
  • win32security(它围绕着winapi,对吗?)——我确信它可以像这样处理,但我宁愿不重新发明轮子

还有什么我在这里想念的吗?

0 投票
3 回答
4447 浏览

python - 确定是否继承了 ntfs 权限的可靠方法

我在这里有一个有点模糊的问题。

我需要什么:确定文件/文件夹的权限(或者,严格来说,DACL 的特定 ACE)是否被继承。

我如何尝试解决这个问题:使用 python 的 winapi 绑定(准确地说是 win32security 模块)。这是精简版,它就是这样做的——它只是将文件的路径作为参数,并一一打印出 ACE,指示设置了哪些标志。

很简单——获取一个安全描述符,从中获取一个 DACL,然后遍历 DACL 中的 ACE。这里真正重要的一点是 INHERITED_ACE 访问标志。它应该在 ACE 被继承而不是显式设置时设置。

当您创建文件夹/文件时,其 ACL 会根据父对象(文件夹)的 ACE 填充 ACE,这些 ACE 设置为传播给子对象。但是,除非您对访问列表进行任何更改,否则不会设置 INHERITED_ACE 标志!但是继承的权限在那里并且它们确实有效。

如果您进行任何细微的更改(例如,在访问列表中添加一个条目,应用更改并删除它),标志就会神奇地出现(该行为不会以任何方式改变,但它之前有效,之后有效)!我想要的是找到 INHERITED_ACE 标志的这种行为的来源,并且可能找到另一种可靠的方法来确定 ACE 是否被继承。

如何重现:

  1. 创建对象(文件或文件夹)
  2. 检查 Windows 资源管理器中的权限,查看它们是否已从父对象传播(例如,使用 Windows 资源管理器的文件属性对话框的安全选项卡)。
  3. 例如,使用我正在使用的脚本检查标志(不会在任何 ACE 上设置 INHERITED_ACE)。
  4. 更改对象的权限(应用更改),甚至将它们更改回来。
  5. 检查标志(INHERITED_ACE在那里)
  6. ..难以置信地摇头(我知道我做到了)

抱歉,这篇文章有点冗长,希望这至少有点意义。

0 投票
4 回答
7874 浏览

windows - 在本地 NTFS 驱动器上查找回收站

我正在尝试编写一些简单的代码,这些代码将返回本地驱动器上回收站的目录。似乎这很简单——应该是谷歌上的一千个答案。还没找到:(

我发现 FAT 和 NTFS 驱动器具有不同的基本名称(RECYCLED 和 RECYCLER)。我发现'the'回收站是一个虚拟文件夹,它结合了机器上所有驱动器的回收站。

我还没有找到一种找到 C: 驱动器的回收站目录的方法——即使在越南语(或任何其他非英语)机器上也是如此。(我找不到任何帖子表明“回收站”是否国际化)

谁能给我一个明确的答案?

谢谢

更新:了解CSIDL_BITBUCKET和使用它的功能。从我读过的所有内容来看,它指向一个虚拟目录,该目录是该用户在所有驱动器上删除的所有文件的联合。寻找物理回收站目录(据我所知,在我的 Vista 上,它似乎是 C:\$Recycle.Bin)

0 投票
2 回答
1339 浏览

c# - .net 持久资源管理器,用于事务文件系统访问

我正试图围绕 C# 中 System.Transactions 命名空间的使用。我在 MSDN 上找到了一些关于使用资源管理器的文档,但它只详细介绍了易失性内存资源管理器(如 Transactional )。我基本上是在寻找可以在 TransactionScope 中使用的东西,就像 Transactional<> 一样,但用它来写入/修改/删除磁盘上的文件。标准库中是否存在类似的东西?我已经读到 NTFS 现在有“TxF”以允许事务文件系统访问——我期待在 .net 中找到利用它的东西。也许我需要实现自己的?

0 投票
1 回答
2529 浏览

multithreading - 是否有 API 仅在特定文件夹上设置 NTFS ACL 而不会向下流动权限?

在我的环境中,我有几个项目涉及在多个文件服务器上运行 NTFS ACL 审计报告和各种 ACL 清理活动。我无法在服务器上本地执行这些活动的主要原因有两个:

1)我没有对服务器的本地访问权限,因为它们实际上是由另一家公司拥有和管理的。

2) 它们是运行经过修改的 Linux 操作系统(称为 GuardianOS)的SNAP NAS 服务器,因此即使我可以获得本地访问权限,我也不确定是否可以使用工具来执行我需要的操作。

解决了这个问题,我最终推出了自己的 ACL 审计报告工具,该工具将从指定的顶级路径开始向下递归文件系统,并针对在 ACL 上遇到的所有组/用户生成 HTML 报告以及显示权限的变化,因为它下降了树。在开发这个工具时,我发现网络开销是执行这些操作的最糟糕的部分,通过多线程处理,我可以实现更高的性能。

但是,我仍然坚持寻找一个好的工具来执行 ACL 修改和清理。您的标准开箱即用工具(cacls、xcacls、Explorer)似乎是单线程的,并且在通过网络时会遭受显着的性能损失。我看过滚动我自己的多线程 ACL 设置程序,但我熟悉的唯一 API 是 .NET FileSystemAccessRule 的东西,问题是如果我在文件夹中设置权限,它会自动想要“流动”权限下降。这会导致一个问题,因为我想自己使用多线程来“流动”。

我知道NTFS“允许”继承权限不一致,因为我已经看到它在具有不同继承权限的两个父文件夹之间的同一卷上移动文件夹/文件,并将旧权限保持为“继承”。

问题

1) 有没有办法设置适用于当前文件夹和所有子文件夹的 ACL(您的标准“适用于文件、文件夹和子文件夹”ACL)但不会自动向下流向子对象?基本上,我希望能够告诉 Windows“是的,这个 ACL 应该应用于子对象,但现在,直接在这个对象上设置它”。

为了清楚起见,我知道适用于“仅此文件夹”的 ACL 选项,但随后我失去了继承,这是一项要求,因此该选项对我的用例无效。

2) 任何人都知道以多线程方式执行 ACL 修改的任何好的算法或方法吗?我的直觉是文件系统的任何递归遍历在理论上都应该有效,特别是如果您只是在顶级文件夹上定义一个新的 ACL 并且只想“清理”所有子文件夹。您将在顶层标记新的 ACL,然后递归向下删除任何显式 ACE,然后将继承的权限“向下流动”。

(仅供参考,这个问题与 ServerFault部分重复,因为它实际上既是系统管理员问题又是编程问题。在另一个问题上,我问是否有人知道任何可以通过网络进行快速 ACL 设置的工具。)

0 投票
2 回答
3628 浏览

windows - 在 Windows 中查找和删除坏的符号链接

有什么简单的方法可以在 Windows 中找到损坏的 ntfs 符号链接并删除它们?(手动搜索和销毁除外)

由于Windows Home Server无法在不删除磁盘的情况下升级:/并且文件随机分散在一堆磁盘上(但结构完好无损并在所有磁盘上镜像),我陷入了困境

0 投票
1 回答
3800 浏览

windows-server-2008 - Windows Server 2008 - 一次更改多个文件的安全设置

在 Windows Server 2008 上,是否有一种简单的方法可以一次修改多个文件的安全权限(与 Windows Server 2003 一样)?如果选择了多个文件/目录(即 ctrl-单击多个文件),则右键单击 - 属性不提供“安全”选项卡。

同样,除了更改注册表之外,有没有办法在记事本中编辑文件而无需以管理员身份打开记事本?实际上,由于 UAC,您必须以管理员身份打开记事本,然后打开要编辑的文件(否则无法保存)。

更新:移至https://serverfault.com/questions/30991/windows-server-2008-change-security-settings-for-multiple-files-at-once

B 部分的答案:“至于编辑文件:如果您授予普通(非管理员)用户对文件的写入权限,则不必以管理员身份运行记事本。” 谢谢@Martin v. Löwis

0 投票
2 回答
632 浏览

c - 如何复制硬盘分区?

我想将一个 NTFs 分区复制到另一个相同类型和相同大小的分区。我尝试使用 windows 函数 Copyfile() 并且它工作但速度慢是一个问题。然后我使用 readfile() 和 WriteFile() 而不是 Copyfile( )再次速度是一个问题。

我怎样才能获得更好的速度...??

我在内核模式下进行了相同的操作,并且使用 zwCreatefile() 、zwReadfile() 和 zwWriteFile() 获得了缓慢的性能...

我怎样才能获得更好的速度......?

我想将一个硬盘分区复制到另一个分区。我的源分区和目标分区是 NTF 且大小相同。为此,我首先复制了所有扇区并且它正在工作,但我只想复制使用过的扇区......</p>

然后我通过阅读 FSCTL_VOLUME_BITMAP 找到使用过的集群。但这一个也很慢..我想获得更好的速度。我也尝试通过使用 FSCTL_GET_RETEIVAL_POINTER 来获取使用过的集群。但它是一个缓慢的......

最后我也尝试了windows API CopyFile()…但是一切都给了一个缓慢的性能…</p>

我从根本上知道内核模式(环 0)的速度比用户模式慢,(即使环 0 可以直接访问硬件).....

除了它们之外,我还通过在 CreateFile 中设置 OVERLAPPED 标志尝试了异步操作....得到了小的改进....

而且我已经拍摄了卷的快照(卷影副本)并使用 Hobo 复制方法复制了文件......但一切都给出了相同的速度......

任何想法来帮助...

我用过Software Acronis Disk Director Suite。发现它的速度后我惊呼......!!!!!!

有什么想法可以帮助我...获得良好的速度.......???

与本节相关的白皮书的任何链接......???


感谢您

0 投票
1 回答
6431 浏览

c - 获取硬盘的集群大小(通过代码)

我需要通过 C 或 C++ 找到用户硬盘驱动器的集群大小。硬盘驱动器使用 NTFS(尽管我很高兴知道它在其他文件系统上是如何完成的)。

我想我需要的是一些 win32 API 调用的组合,但我不知道是哪个。

例如,在 Windows 控制台中键入“fsutil fsinfo ntfsinfo c:”会得到“每个集群的字节数”,这正是我所需要的。(尽管出于显而易见的原因,我不想运行该命令并解析它的输出。)

0 投票
2 回答
310 浏览

php - 为什么flock在Windows/NTFS上偶尔会花很长时间?

我使用文件系统来创建应用程序范围的持久单例(应用程序不使用数据库)。有时,加载一个页面需要 1-2 分钟,我已将问题缩小到在获取单例实例的函数中使用 flock。这是代码的简化版本:(编辑:在我的原始帖子中省略了代码中最重要的部分)

该代码目前正在我使用 XP 和 NTFS 的开发机器上运行。
始终会创建锁(即不调用 trigger_error)。
延迟是随机的,但似乎在刷新时发生得更频繁。
摆脱羊群完全消除了这个问题,但它也使代码不安全。

有什么建议吗?

有谁知道创建应用程序范围的持久单例的更好方法?