Вопрос:
Я использую код, найденный по http://support.microsoft.com/kb/306273
добавить пользователя Windows. Проблема, я должен добавить пользователя к группе, но groupnames локализуются.
Например, пример MS использует английский компьютер, что означает, что можно получить гостевую группу как это: группа = AD.Children. Найдите ("Гости", "группа")
Но на неанглийском компьютере, 'Гость' groupname локализуется, имея в виду, например, на моем немецком языке ОС, название группы для Гостей является "Gäste".
Что означает, чтобы пример поддержки работал на моем компьютере, я должен изменить ту строку на группу = AD.Children. Найдите ("Gäste", "группа")
затем это работает.
Теперь, если ОС является каким-либо другим языком, как я могу найти имя гостевого пользователя? Или как я могу получить имя гостевого пользователя от sid?
Примечание:.NET 2.0, не 3.0 или 3.5
Как вы уже отметили, названия групп локализуются в зависимости от языка системы.
Для "хорошо известных" групп, таких как "Администраторы" и "Гости", вы должны выполнить поиск на основе SID. SID для Guests:
S-1-5-32-546
Список известных SID здесь:
http://support.microsoft.com/kb/243330
Код для получения имени группы из SID можно найти здесь
Вы должны иметь возможность использовать классы WindowsIdentity и WindowsPrincipal:
Dim currentIdentity as WindowsIdentity = WindowsIdentity.GetCurrent()
Dim currentPrincipal as WindowsPrincipal = New WindowsPrincipal(currentIdentity)
If currentPrincipal.IsInRole(WindowsBuiltInRole.Guest) Then
Foobar()
End If
Неважно, я вижу, вы на самом деле пытались ДОБАВИТЬ пользователя в группу.
На этой странице есть код для получения сведений о пользователе и их проверки.
Этот код:
public IdentityReferenceCollection GetUserGroups()
{
System.Security.Principal.WindowsIdentity currentUser =
System.Security.Principal.WindowsIdentity.GetCurrent();
return currentUser.Groups;
}
возвращает группы текущего пользователя.
Более подробную информацию о классе WindowsIdentity
в целом можно найти здесь , со свойством Groups
здесь .
Поиск счета по SID - лучший способ. Это немного надуманно, но работает это так:
SID учетной записи Administrator всегда начинается с S-1-5-21
и заканчивается -500
. Все остальное между ними случайно (SID домена).
SID учетной записи Гость всегда начинается с S-1-5-21
и заканчивается -501
.
Статья Microsoft KB, описывающая это, доступна здесь.
Чтобы найти эти учетные записи, вам придется перечислить все учетные записи на локальной машине и найти, какие SID начинаются и заканчиваются этими номерами. Как только они совпадут, вы получите встроенные учетные записи. Не самый приятный способ, но он работает.
Существует также параметр групповой политики в разделе Security Settings\Local Policies\Security Options под названием Accounts: Rename administrator account и Accounts: Переименовать учетную запись гостя. Я не смог найти, где в реестре хранятся эти параметры, но если вы сможете найти и посмотреть их, то, скорее всего, сможете узнать "официальные" имена этих двух учетных записей.