Подтвердить что ты не робот

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

Вопрос:

Я использую код, найденный в http://support.microsoft.com/kb/306273

чтобы добавить пользователя Windows. Проблема в том, что мне нужно добавить пользователя в группу, но имена групп локализованы.

например. в примере MS используется английский компьютер, что означает, что вы можете получить гостевую группу следующим образом: grp = AD.Children.Find( "Гости", "группа" )

Но на неанглийском компьютере имя группы "Guest" локализовано, например, на моей немецкой ОС, имя группы для гостей - "Gäste".

Что означает, что для примера поддержки для запуска на моем компьютере мне нужно изменить эту строку на grp = AD.Children.Find( "Gäste", "group" )

тогда он работает.

Теперь, если ОС - какой-либо другой язык, как я могу найти имя для гостевого пользователя? Или как я могу получить гостевое имя пользователя из sid?

Примечание:.NET 2.0, а не 3.0 или 3.5

4b9b3361

Ответ 1

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

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

S-1-5-32-546

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

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

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

Ответ 2

Вы можете использовать этот код, возвращаемое значение верно для неанглийских систем:

var guestsGroup = new SecurityIdentifier(WellKnownSidType.BuiltinGuestsSid, null).Translate(typeof(NTAccount)).Value;

Ответ 3

Поиск учетной записи по SID - лучший способ. Это немного надуманно, но способ, которым это работает, заключается в следующем:

  • Идентификатор учетной записи Администратор всегда начинается с S-1-5-21 и заканчивается на -500. Все остальное промежуточное является случайным (SID домена).

  • Идентификатор учетной записи Гость всегда начинается с S-1-5-21 и заканчивается на -501.

Статья Microsoft KB, описывающая это, доступна здесь.

Чтобы найти эти учетные записи, вам нужно будет перечислить все учетные записи на локальном компьютере и найти, с каких SID начинать и заканчивать эти номера. Как только они совпадут, у вас есть встроенные учетные записи. Не самый приятный способ сделать это, но он работает.

Существует также параметр групповой политики в разделе Параметры безопасности\Локальные политики\Параметры безопасности, называемые Учетные записи: переименование учетной записи администратора и Учетные записи: переименование гостевой учетной записи strong > . Я не смог найти, где в реестре эти параметры сохранены, но если вы сможете узнать, и вы посмотрите их, вы, скорее всего, сможете получить "официальные" имена этих двух учетных записей.

Ответ 4

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

Этот код:

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

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

Подробнее о классе WindowsIdentity в целом можно найти здесь, с свойством Groups здесь.

Ответ 5

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

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

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

Nevermind, я вижу, вы на самом деле пытались добавить пользователя в группу.