【问题标题】:Determine case sensitivity of a Windows volume in kernel mode在内核模式下确定 Windows 卷的区分大小写
【发布时间】:2016-04-25 17:06:59
【问题描述】:

Windows API 支持GetVolumeInformation 函数。此函数提供有关 Windows 卷的信息。具体来说,它返回一个 FILE_CASE_SENSITIVE_SEARCH 开关。在内核中有FltQueryVolumeInformationZwQueryVolumeInformationFile,但我看不到任何从可用信息类中获取区分大小写信息的方法。

我是否正确理解 FILE_CASE_SENSITIVE_SEARCH 开关仅指定可以进行区分大小写的搜索(而不是默认情况下完成)?您仅根据打开文件的方式知道区分大小写是否正确(即您必须使用 FILE_FLAG_POSIX_SEMANTICS 标志调用 CreateFile,否则使用 Win32 不区分大小写的行为)?

【问题讨论】:

  • 一个有趣的问题。据我了解,必须在内核中启用区分大小写,由文件系统支持,并且由 CreateFile(或 ZwCreateFile)调用请求才能使其工作。但我不确定 NTFS 是否允许您在每个卷的基础上打开和关闭它,如果不是,我不知道 GetVolumeInformation 实际在查找什么。

标签: windows winapi kernel32


【解决方案1】:

好的,我在MSDN上问了这个问题,找到了answer

不知何故,我错过了 FILE_FS_ATTRIBUTE_INFORMATION 信息类属性将允许 ZwQueryVolumeInformationFile 和 FltQueryVolumeInformation 函数返回一个包含 FileSystemAttributes 字段的结构,该字段具有各种位标志,包括 FILE_CASE_PRESERVED_NAMES 和 FILE_CASE_SENSITIVE_SEARCH。

这仅表明该卷将支持区分大小写的名称搜索(而不是默认为它)。您仍然需要在 CreateFile 上使用 FILE_FLAG_POSTIX_SEMANTICS 标志来利用区分大小写的优势。似乎还有一个注册表设置可以将其设为默认值(您可以 google/bing)。

【讨论】:

    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 2017-06-12
    • 2011-10-16
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多