C#中通过代码验证计算机登录账户与密码是否合法,可以通过API函数LogUser()完成,详细说明如下:
【LogonUser】
调用这个函数试图用一个用户名来登录本台计算机。在用这个函数时你必须区分要登录的用户名和所要登录的域。如果登录成功,将会得到一个句柄。
这是一个windows的API函数
一、函数形式(VC++):
BOOL LogonUser(
LPTSTR lpszUsername,
LPTSTR lpszDomain,
LPTSTR lpszPassword,
DWORD dwLogonType,
DWORD dwLogonProvider,
PHANDLE phToken
);
返回值:
返回1表示登录成功,并会得到phToken句柄,返回0表示登录失败。
参数类型及说明:
lpszUsername: 登录的用户名
lpszDomain: 要登录的计算机,如果为。或者NULL则是登录本机
lpszPassword: 登录密码
dwLogonType: 登录方式,类型如:LOGON32_LOGON_INTERACTIVE登录进去还要进行操作。
dwLogonProvider:登录提供,一般为LOGON32_PROVIDER_DEFAULT
对于c++中调用此函数,不多说,重点说明C#中如何调用。
二、函数形式(VC#):
【1】声明调用信息
DllImport("advapi32.dll")]
private static extern bool LogonUser(string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
【2】封装成子函数
private boolCheckPsw(string username, string domain, string passwd)
{
const int dwLogonType = 2; //通过网络验证账户合法性
const int lpszDomain = 0; //使用默认的Windows 2000/NT NTLM验证方法
IntPtr tokenHandle = newIntPtr(0);
tokenHandle = IntPtr.Zero;
LogonUser(username,domain, passwd, dwLogonType, lpszDomain, ref tokenHandle);
return checkok;
}
【3】调用实例:
if(!CheckPsw(_strUser.Text, Environment.UserDomainName, _strPsw.Text))
MessageBox.Show("请保证用户名和密码确认","提示信息", MessageBoxButtons.OK);
else
MessageBox.Show("登录成功");
//其中_strUser为用户名,_strPsw为密码
(当密码为空的时候,LogonUser会返回FALSE。经过研究,发现如果密码为空的时候,GetLastError会返回1327错误,也就是说,Windows不允许LogonUser以空的密码来登录。)