Nažalost, Mrav-e, to ne rešava problem. Iako će CurrentPrincipal pokazivati na tvoj generic principal, to neće imati nikakvog uticaja na security limite koji su postavljani od strane Windows-a. Realno, laički, pogledaj kod i primetićeš da nigde nema lozinke, dakle kad bi to moglo ovako, .net aplikacija bi mogla sebi da dodeli administratorske privilegije i da vršlja po OSu

. Zbog takvih bezobraznih namera Windows priznaje samo svoj mehanizam security token-a a jedini način da se dođe do tokena je preko API funkcije LogonUser:
Code:
[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
phToken će imati handle na security token korisnika i taj isti handle se može iskoristiti da se kreira .net WindowsIdentity principal, koji ima metod Impersonate koji mu omogućava da privremeno promeni secuirty token trenutnog thread-a unutar samog OS-a.
Code:
WindowsIdentity newId = new WindowsIdentity(tokenHandle);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();
WindowsImpersonationContext koji se vrati je u stvari "stari" korisnik i pozivom Undo metode stvari se vraćaju na mesto:
Code:
impersonatedUser.Undo();
Sve OS operacije između Impersionate() i Undo() će raditi pod accountom "drugog" korisnika.
Zakačen je ceo kod (prerađen sample iz MSDNa), pa povadite šta vam treba...