Проверка имени пользователя и пароля в .NET
Для проверки имени пользователя Windows единственный надежный способ залогиниться под ним. Для этого используем функцию API:
using System.Runtime.InteropServices;
namespace SetRights
{
class LoginHelper
{
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);
const int LOGON32_PROVIDER_DEFAULT = 0;
//этот параметр вызывает LogonUser, чтобы создать первичный токен
const int LOGON32_LOGON_INTERACTIVE = 2;
static public void ValidateUser(string userName, string domainName, string password)
{
IntPtr tokenHandle = new IntPtr(0);
tokenHandle = IntPtr.Zero;
//Вызов LogonUser, чтобы получить дескриптор для доступа
bool returnValue = LogonUser(userName, domainName, password,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
if (false == returnValue)
{
int ret = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(ret);
}
// освобождаем токены
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
}
}
}
Комментарии
Отправить комментарий