using le système ;
using System.Runtime.InteropServices ;
using System.Security.Principal ;
using System.Security.Permissions ;
sécurité publique de classe
{
tokenHandle privé d'IntPtr = nouvel IntPtr (0) ;
impersonatedUser privé de WindowsImpersonationContext ;
[DllImport (« kernel32.dll »)]
bool externe statique CloseHandle (poignée d'IntPtr) ;
Logiciel de validation de //.
// si vous incorporez ce code à un DLL, soit sûr d'exiger FullTrust.
[PermissionSetAttribute (SecurityAction.Demand, nom = « FullTrust »)]
bool public ImpersonateStart (sDomainName de corde, username de corde, mot de passe de corde)
{
returnValue de bool ;
newId = nulle de WindowsIdentity ;
essai
{
tokenHandle = IntPtr.Zero ;
Appel LogonUser de // pour obtenir une poignée à une marque d'accès.
returnValue = faux ;
const international LOGON32_PROVIDER_DEFAULT = 0 ;
le paramètre de //This fait créer LogonUser une marque primaire.
const international LOGON32_LOGON_INTERACTIVE = 2 ;
returnValue = LogonUser (username, sDomainName, tokenHandle de mot de passe, de LOGON32_LOGON_INTERACTIVE, de LOGON32_PROVIDER_DEFAULT, de référence) ;
contrôle de // si ouverture réussie
si ((== de returnValue faux))
{
l'international rouissent = Marshal.GetLastWin32Error () ;
jet nouveau System.ComponentModel.Win32Exception (rouir) ;
}
autrement
{
L'ouverture de // a réussi
Utilisation de // que la poignée symbolique est retournée par LogonUser.
newId = nouveau WindowsIdentity (tokenHandle) ;
impersonatedUser = newId.Impersonate () ;
}
}
crochet (exception ex)
{
ex = nulle ;
returnValue = faux ;
}
finalement
{
si (! (nulle de == de newId))
{
newId.Dispose () ;
newId = nulle ;
}
}
returnValue de retour ;
}
[PermissionSetAttribute (SecurityAction.Demand, nom = « FullTrust »)]
public ImpersonateStop vide ()
{
essai
{
Arrêt de // personnifiant l'utilisateur.
impersonatedUser.Undo () ;
// libèrent les marques.
si (tokenHandle ! = IntPtr.Zero)
{
CloseHandle (tokenHandle) ;
}
}
crochet (retour de System.Exception)
{
}
}
[DllImport (« advapi32.dll », SetLastError = rectifient, CharSet = CharSet.Unicode)]
bool externe statique public LogonUser (lpszUsername de corde, lpszDomain de corde, lpszPassword de corde,
le dwLogonType d'international, le dwLogonProvider d'international, référence IntPtr phToken) ;
}
|