using система;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
общественная обеспеченность типа
{
приватное tokenHandle IntPtr = новое IntPtr (0);
приватное impersonatedUser WindowsImpersonationContext;
[DllImport («kernel32.dll»)]
статическое extern bool CloseHandle (ручка IntPtr);
Проводка испытания //.
// если вы включаете это Кодего в DLL, то, уверенн потребовать FullTrust.
[PermissionSetAttribute (SecurityAction.Demand, имя = «FullTrust»)]
общественное bool ImpersonateStart (sDomainName шнура, userName шнура, пароль шнура)
{
returnValue bool;
newId = null WindowsIdentity;
попытка
{
tokenHandle = IntPtr.Zero;
Звонок LogonUser // для того чтобы получить ручку к знаку внимания доступа.
returnValue = ложно;
const int LOGON32_PROVIDER_DEFAULT = 0;
параметр //This причиняет LogonUser создать главным образом знак внимания.
const int LOGON32_LOGON_INTERACTIVE = 2;
returnValue = LogonUser (userName, sDomainName, tokenHandle пароля, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref);
проверка // если logon успешно
если (, то (== returnValue ложное))
{
int ret = Marshal.GetLastWin32Error ();
ход новое System.ComponentModel.Win32Exception (ret);
}
еще
{
Преуспетый Logon //
Польза // token, котор ручка возвратила LogonUser.
newId = новое WindowsIdentity (tokenHandle);
impersonatedUser = newId.Impersonate ();
}
}
задвижка (исключение ex)
{
ex = null;
returnValue = ложно;
}
окончательно
{
если (! (null == newId))
{
newId.Dispose ();
newId = null;
}
}
возвращенное returnValue;
}
[PermissionSetAttribute (SecurityAction.Demand, имя = «FullTrust»)]
публика пустое ImpersonateStop ()
{
попытка
{
Стоп // воплощая потребителя.
impersonatedUser.Undo ();
// освобождает знаки внимания.
если (tokenHandle! = IntPtr.Zero)
{
CloseHandle (tokenHandle);
}
}
задвижка (возвращение System.Exception)
{
}
}
[DllImport («advapi32.dll», SetLastError = true, CharSet = CharSet.Unicode)]
общественное статическое extern bool LogonUser (lpszUsername шнура, lpszDomain шнура, lpszPassword шнура,
dwLogonType int, dwLogonProvider int, ref IntPtr phToken);
}
|