Come prima cosa bisogna applicare i criteri principali del dominio applicazione corrente a WindowsPrincipal, altrimenti una richiesta di autorizzazione principale avrà esito negativo.
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);Ora abbiamo bisogno di sapere quale è l'utente che sta eseguendo il thread corrente.
//Estrae l'identità dell'utente del thread corrente WindowsIdentity wi = (WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity; //Estrae il nome utente da suo sid IdentityReference mYaccount = wi.User.Translate(typeof(NTAccount)); //Visualizza il nome utente estratto da suo sid MessageBox.Show("Utente:" + mYaccount.Value);Adesso dobbiamo ricavare il gruppo administrator da assegnare alla funzione di controllo. Per aiutarvi potete visualizzare i nomi dei gruppi a cui l'utente del thread appartiene così:
StringBuilder sbMsg = new StringBuilder(); foreach (IdentityReference sidRef in wi.Groups) { IdentityReference account = sidRef.Translate(typeof(NTAccount)); sbMsg.AppendLine(account.Value); } MessageBox.Show(sbMsg.ToString());Ora per impedire all'applicazione di partire se non siamo amministratori, usiamo le seguenti istruzioni:
try { PrincipalPermission permessi = new PrincipalPermission(mYaccount.Value, "BUILTIN\\Administrators"); permessi.Demand(); } catch (SecurityException ex) { MessageBox.Show(ex); //Esci dall'applicazione }
Nessun commento:
Posta un commento