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

Вопрос:

Я использую код, найденный по 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

15
задан Stefan Steiger 9 July 2010 в 13:20
поделиться

4 ответа

Как вы уже отметили, названия групп локализуются в зависимости от языка системы.

Для "хорошо известных" групп, таких как "Администраторы" и "Гости", вы должны выполнить поиск на основе SID. SID для Guests:

S-1-5-32-546

Список известных SID здесь:

http://support.microsoft.com/kb/243330

Код для получения имени группы из SID можно найти здесь

12
ответ дан 1 December 2019 в 02:54
поделиться

Вы должны иметь возможность использовать классы WindowsIdentity и WindowsPrincipal:

Dim currentIdentity as WindowsIdentity = WindowsIdentity.GetCurrent()
Dim currentPrincipal as WindowsPrincipal = New WindowsPrincipal(currentIdentity)

If currentPrincipal.IsInRole(WindowsBuiltInRole.Guest) Then
   Foobar()
End If

Неважно, я вижу, вы на самом деле пытались ДОБАВИТЬ пользователя в группу.

0
ответ дан 1 December 2019 в 02:54
поделиться

На этой странице есть код для получения сведений о пользователе и их проверки.

Этот код:

public IdentityReferenceCollection GetUserGroups()
{
    System.Security.Principal.WindowsIdentity currentUser =
                      System.Security.Principal.WindowsIdentity.GetCurrent();
    return currentUser.Groups;
}

возвращает группы текущего пользователя.

Более подробную информацию о классе WindowsIdentity в целом можно найти здесь , со свойством Groups здесь .

1
ответ дан 1 December 2019 в 02:54
поделиться

Поиск счета по 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: Переименовать учетную запись гостя. Я не смог найти, где в реестре хранятся эти параметры, но если вы сможете найти и посмотреть их, то, скорее всего, сможете узнать "официальные" имена этих двух учетных записей.

3
ответ дан 1 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: