在内核模式下确定 Windows 卷的大小写敏感性

Determine case sensitivity of a Windows volume in kernel mode

Windows API 支持 GetVolumeInformation function. This function provides information about a Windows volume. Specifically, it returns a FILE_CASE_SENSITIVE_SEARCH switch. In the kernel there are FltQueryVolumeInformation and ZwQueryVolumeInformationFile,但我看不出有任何方法可以从可用信息 类 中导出区分大小写的信息。

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

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

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

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