2010-07-09 6 views
16

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

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 grupo están localizados.

E.g. el ejemplo MS usa una computadora inglesa, lo que significa que puede obtener el grupo de invitados de esta manera: grp = AD.Children.Find ("Invitados", "grupo")

Pero en una computadora que no sea inglesa, la El nombre de grupo "Invitado" está localizado, lo que significa, por ejemplo, en mi SO de idioma alemán, el nombre de grupo para Invitados es "Gäste".

Lo que significa que para el ejemplo de soporte para funcionar en mi equipo tengo que cambiar esa línea para grp = AD.Children.Find ("Personas discapacitadas", "grupo")

entonces funciona.

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

Nota: .NET 2.0, 3.0 o 3.5 no

Respuesta

13

Como ha señalado, los nombres de los grupos se localizan según el idioma del sistema.

Para grupos 'conocidos' como 'Administradores' e 'Invitados' debe recuperar en base al SID.El SID para los clientes es:

S-1-5-32-546 

No es una lista de SID conocidos aquí:

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

Código para obtener el nombre del grupo en el SID se puede encontrar here

3

Mirando hacia arriba por la cuenta SID es el mejor camino a seguir. Es un poco artificial, pero la forma en que funciona es la siguiente:

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

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

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

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

También hay una opción de directiva de grupo bajo Configuración de seguridad \ Directivas locales \ Opciones de seguridad llamados Cuentas: Cambiar el nombre de cuenta de administrador y Cuentas: Cambiar el nombre de cuenta de invitado. No pude encontrar en qué parte del registro se almacenan estas configuraciones, pero si puede encontrarlas y buscarlas, lo más probable es que pueda obtener los nombres "oficiales" de estas dos cuentas.

1

This page tiene algún código para obtener detalles del usuario y verificarlos.

este código:

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

devuelve los grupos del usuario actual.

Más detalles sobre la clase WindowsIdentity en su conjunto se pueden encontrar here, con la propiedad hereGroups.

0

Usted debe ser capaz de utilizar 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 estaban tratando de agregar un usuario al grupo.

8

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

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