using il sistema;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
pubblica sicurezza del codice categoria
{
tokenHandle riservato di IntPtr = nuovo IntPtr (0);
impersonatedUser riservato di WindowsImpersonationContext;
[DllImport (“kernel32.dll„)]
bool extern statico CloseHandle (maniglia di IntPtr);
Cablaggio di prova di //.
// se comprendete questo codice in un DLL, è sicuro richiedere FullTrust.
[PermissionSetAttribute (SecurityAction.Demand, nome = “FullTrust„)]
bool pubblico ImpersonateStart (sDomainName della stringa, username della stringa, parola d'accesso della stringa)
{
returnValue di bool;
newId = posizione di segnale minimo di WindowsIdentity;
prova
{
tokenHandle = IntPtr.Zero;
Chiamata LogonUser di // per ottenere una maniglia ad un segno di accesso.
returnValue = falso;
const int LOGON32_PROVIDER_DEFAULT = 0;
il parametro di //This induce LogonUser a generare un segno primario.
const int LOGON32_LOGON_INTERACTIVE = 2;
returnValue = LogonUser (username, sDomainName, tokenHandle di parola d'accesso, di LOGON32_LOGON_INTERACTIVE, di LOGON32_PROVIDER_DEFAULT, di riferimento);
controllo di // se inizio attività riuscito
se ((== del returnValue falso))
{
il int macera = Marshal.GetLastWin32Error ();
tiro nuovo System.ComponentModel.Win32Exception (macerare);
}
altrimenti
{
L'inizio attività di // è riuscito
Uso che di // la maniglia simbolica ha restituito da LogonUser.
newId = nuovo WindowsIdentity (tokenHandle);
impersonatedUser = newId.Impersonate ();
}
}
fermo (eccezione ex)
{
ex = posizione di segnale minimo;
returnValue = falso;
}
infine
{
se (! (posizione di segnale minimo del == del newId))
{
newId.Dispose ();
newId = posizione di segnale minimo;
}
}
returnValue di ritorno;
}
[PermissionSetAttribute (SecurityAction.Demand, nome = “FullTrust„)]
pubblico ImpersonateStop vuoto ()
{
prova
{
Arresto di // che impersonating l'utente.
impersonatedUser.Undo ();
// libera i segni.
se (tokenHandle! = IntPtr.Zero)
{
CloseHandle (tokenHandle);
}
}
fermo (ritorno di System.Exception)
{
}
}
[DllImport (“advapi32.dll„, SetLastError = allineano, CharSet = CharSet.Unicode)]
bool extern statico pubblico LogonUser (lpszUsername della stringa, lpszDomain della stringa, lpszPassword della stringa,
il dwLogonType di int, il dwLogonProvider di int, il riferimento IntPtr phToken);
}
|