Определить чувствительность к регистру тома Windows в режиме ядра

Windows API поддерживает GetVolumeInformationфункция. Эта функция предоставляет информацию о томе Windows. В частности, он возвращает переключатель FILE_CASE_SENSITIVE_SEARCH. В ядре есть FltQueryVolumeInformation и ZwQueryVolumeInformationFile , но я не вижу способа получить информацию о чувствительности к регистру из доступных информационных классов.

Правильно ли я понимаю, что переключатель FILE_CASE_SENSITIVE_SEARCH указывает только на возможность поиска с учетом регистра (а не на то, что он выполняется по умолчанию)? Правильно ли, что вы знаете о чувствительности к регистру только в зависимости от того, как открывается файл (т. е. вы должны вызывать CreateFile с флагом FILE_FLAG_POSIX_SEMANTICS, иначе используется поведение Win32 без учета регистра)?


person Dweeberly    schedule 25.04.2016    source источник
comment
Интересный вопрос. Насколько я понимаю, чувствительность к регистру должна быть включена в ядре, поддерживаться файловой системой и и запрашиваться вызовом CreateFile (или ZwCreateFile), чтобы это работало. Но я не уверен, позволяет ли NTFS включать и выключать его для каждого тома, а если нет, то я не знаю, что на самом деле ищет GetVolumeInformation.   -  person Harry Johnston    schedule 26.04.2016


Ответы (1)


Хорошо, я задал этот вопрос в MSDN и нашел ответ

Почему-то я пропустил это FILE_FS_ATTRIBUTE_INFORMATION позволит функциям ZwQueryVolumeInformationFile и FltQueryVolumeInformation возвращать структуру, содержащую поле FileSystemAttributes с различными битовыми флагами, включая FILE_CASE_PRESERVED_NAMES и FILE_CASE_SENSITIVE_SEARCH.

Это только показывает, что том будет поддерживать поиск по имени с учетом регистра (не то, что он используется по умолчанию). Вам по-прежнему необходимо использовать флаг FILE_FLAG_POSTIX_SEMANTICS в CreateFile, чтобы воспользоваться чувствительностью к регистру. Также, похоже, есть параметр реестра, чтобы сделать это значение по умолчанию (вы можете найти это в Google/bing).

person Dweeberly    schedule 28.04.2016