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以空的密码来登录。)