Какой язык использует Windows для проверки имен пользователей?

Имена пользователей в Windows не чувствительны к регистру (но сохраняются в регистре), поэтому вы можете войти в систему как UserName и UserName. Тем не менее, "случай" отличается для разных локалей - какой язык использует Windows, чтобы решить, что предоставленное имя пользователя совпадает с именем в базе данных учетной записи?

Я считаю, что это Invariant Locale, и это не зависит от чего-либо в диалоговом окне "Язык и региональные настройки", но я могу ошибаться. В любом случае, я был бы признателен за что-то вроде статьи MSDN для подтверждения (или опровержения).

Ответ 1

Windows использует подход "UpCase и Binary Compare" для сравнения имен файлов (см. Сравнение имен файлов Unicode правильным образом и Сравнение имен файлов Win32), поэтому существует высокая вероятность того, что имена пользователей соответствуют тем же правилам сопоставления (пользовательские папки, созданные в папке "Пользователи", являются частью файловой системы). Сравнение с использованием инвариантной локали должно быть довольно близко к нему, но я не уверен.

Пользовательский язык, пользовательский пользовательский интерфейс и т.д., безусловно, не используются, потому что это приведет к тому, что объекты системы управления зависят от пользовательских настроек.

Ответ 2

Язык интерфейса - это то, что решает это. См. это сообщение в блоге MSDN о различиях. Хотя в нем конкретно не упоминаются имена пользователей, он говорит, что:

Язык интерфейса пользователя в Windows - это язык, который система использует для связи с пользователем.

Это говорит мне, что до входа в систему это настройки языка/локали, которые Windows представляет пользователю. Таким образом, можно ввести имя пользователя, используя символы на их африкаанс или японскую клавиатуру, если язык пользовательского интерфейса системы настроен на африкаанс или японский.

Кроме того, в этой статье говорится, что (в палитре/дереве разработки Windows Desktop App)/

Система использует Unicode исключительно для управления символами и строками.

Теперь, когда вы сказали - google говорит мне (как вы упомянули), что по умолчанию обработка Windows с именами пользователей "case-aware", но не "чувствительная к регистру", означает, что она сохранит случай, как указано при создании пользователя, но при проверке учетных данных это не волнует. Кроме того, Active Directory не учитывает регистр.

Из этого я прочитал, что во время аутентификации есть некорректное изменение введенного и сохраненного имени пользователя, что означает, что должно быть какое-то жестко закодированное предположение о символах UTF-8, если для языка пользовательского интерфейса установлено значение en -US (и, возможно, любой en- * язык/локаль). Я не знаю, будет ли это делать это для любого "западного" базового языка; Я ничего не смог найти.

Ответ 3

Это зависит от языка пользовательского интерфейса. Не уверен в других, но одним из самых проблемных языков "случаев" является турецкий. Поскольку все остальные языки имеют нижнюю букву "i" с точкой на ней, но на турецком языке мы имеем "ı", а также "i". У нас также есть капиталы "Я" и "И". Таким образом, это требует самоиспользования.

Ссылаясь на wikipedia, имена пользователей используются с переменными среды, которые не чувствительны к регистру в Windows. Но это "случай-осознание", как сказал klugerama.