2010-07-09 2 views
16

Domanda:Come posso ottenere il nome del gruppo locale per ospiti/amministratori?

io uso il codice trovato in http://support.microsoft.com/kb/306273

per aggiungere un utente di Windows. Il problema è che ho bisogno di aggiungere l'utente a un gruppo, ma i nomi dei gruppi sono localizzati.

E.g. l'esempio MS utilizza un computer inglese, il che significa che è possibile ottenere il gruppo guest in questo modo: grp = AD.Children.Find ("Ospiti", "gruppo")

Ma su un computer non inglese, il Il nome del gruppo "Guest" è localizzato, ad esempio sul mio sistema operativo in lingua tedesca, il nome del gruppo per gli ospiti è "Gäste".

Il che significa che per l'esempio il supporto per l'esecuzione sul mio computer ho bisogno di cambiare quella linea di grp = AD.Children.Find ("Gäste", "gruppo")

allora funziona.

Ora, se il sistema operativo è un'altra lingua, come posso trovare il nome per l'utente ospite? O come posso ottenere il nome utente ospite da un sid?

Nota: NET 2.0, 3.0 o 3.5 non

risposta

13

Come è stato sottolineato, i nomi dei gruppi sono localizzati in base alla lingua del sistema.

Per i gruppi 'ben noti' come 'amministratori' e 'ospiti' si deve recuperare sulla base del SID.Il SID per ospiti è:

S-1-5-32-546 

V'è un elenco di SID noti qui:

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

codice per ottenere il nome del gruppo dal SID può essere trovato here

3

Guardando il conto dal SID è il modo migliore per andare. E 'un po' forzato, ma il modo in cui funziona è questo:

  • L'amministratore dell'account SID sempre inizia con S-1-5-21 e finisce con -500. Tutto il resto intermedio è casuale (il SID del dominio).

  • SID sempre avvia il dell'account ospiti con S-1-5-21 e termina con -501.

L'articolo Microsoft KB che descrive questo è disponibile here.

Per trovare questi account, è necessario enumerare tutti gli account sul computer locale e individuare i SID che iniziano e terminano con tali numeri. Una volta che corrispondono, hai gli account predefiniti. Non è il modo più bello per farlo, ma funziona.

C'è anche un'impostazione dei criteri di gruppo sotto Impostazioni protezione \ Criteri locali \ Opzioni di protezione chiamati Account: rinomina account amministratore e Account: rinomina account guest. Non sono stato in grado di trovare dove nel registro sono memorizzate queste impostazioni, ma se riesci a scoprirlo e le cerchi, probabilmente sarai in grado di ottenere i nomi "ufficiali" di questi due account.

1

This page ha un codice per ottenere i dettagli dell'utente e controllarli.

Questo codice:

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

restituisce gruppi dell'utente corrente.

Ulteriori dettagli sulla classe WindowsIdentity possono essere trovati here, con la proprietà Groupshere.

0

Si dovrebbe essere in grado di utilizzare le classi WindowsIdentity e WindowsPrincipal:

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

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

Nevermind, vedo che sono stati effettivamente cercando di aggiungere un utente al gruppo.

8

È possibile utilizzare questo codice, il valore restituito è corretto per i sistemi non in lingua inglese:

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