¿Cómo puedo obtener el nombre del grupo local para invitados / administradores?

Pregunta:

Uso el código que se encuentra en http://support.microsoft.com/kb/306273

para agregar un usuario de windows. El problema es que necesito agregar el usuario a un grupo, pero los nombres de los grupos están localizados.

Por ejemplo, el ejemplo de MS utiliza una computadora en inglés, lo que significa que puede obtener el grupo invitado de esta forma: grp = AD.Children.Find (“Invitados”, “grupo”)

Pero en una computadora que no está en inglés, el nombre del grupo ‘Invitado’ está localizado, lo que significa, por ejemplo, en mi idioma alemán SO, el nombre del grupo para Invitados es “Gäste”.

Lo que significa que para que el ejemplo de soporte se ejecute en mi computadora, necesito cambiar esa línea a grp = AD.Children.Find (“Gäste”, “group”)

entonces funciona.

Ahora, si el sistema operativo es otro idioma, ¿cómo puedo encontrar el nombre del usuario invitado? ¿O cómo puedo obtener el nombre de usuario invitado de un sid?

Nota: .NET 2.0, no 3.0 o 3.5

Como ha señalado, los nombres de los grupos se localizan en función del idioma del sistema.

Para grupos “conocidos” como “Administradores” e “Invitados”, debe recuperar en función del SID. El SID para invitados es:

S-1-5-32-546 

Hay una lista de SID conocidos aquí:

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

El código para obtener el nombre del grupo del SID se puede encontrar aquí

Puede usar este código, el valor devuelto es correcto para sistemas que no están en inglés:

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

Buscar la cuenta por SID es la mejor manera de ir. Es un poco artificial, pero la forma en que funciona es la siguiente:

  • El SID de la cuenta del Administrador siempre comienza con S-1-5-21 y termina con -500 . Todo lo demás en el medio es aleatorio (SID del dominio).

  • El SID de la cuenta de invitado siempre comienza con S-1-5-21 y termina con -501 .

El artículo de Microsoft KB que describe esto está disponible aquí .

Para encontrar estas cuentas, tendría que enumerar todas las cuentas en la máquina local y encontrar con qué SID comienzan y terminan con esos números. Una vez que coinciden, tienes las cuentas integradas. No es la mejor manera de hacerlo, pero funciona.

También hay una configuración de directiva de grupo en Configuración de seguridad \ Directivas locales \ Opciones de seguridad llamadas Cuentas: Renombrar cuenta de administrador y Cuentas: Renombrar cuenta de invitado . No pude encontrar dónde están almacenadas estas configuraciones en el registro, pero si puede encontrarlas y buscarlas, lo más probable es que pueda obtener los nombres “oficiales” de estas dos cuentas.

Esta página tiene algún código para obtener detalles del usuario y verificarlos.

Este codigo

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

Devuelve los grupos de usuarios actuales.

Más detalles sobre la clase WindowsIdentity en su totalidad se pueden encontrar aquí , con la propiedad Groups aquí .

Debería poder usar las clases WindowsIdentity y WindowsPrincipal:

 Dim currentIdentity as WindowsIdentity = WindowsIdentity.GetCurrent() Dim currentPrincipal as WindowsPrincipal = New WindowsPrincipal(currentIdentity) If currentPrincipal.IsInRole(WindowsBuiltInRole.Guest) Then Foobar() End If 

No importa, veo que en realidad intentabas AGREGAR un usuario al grupo.