原文:
编程实现Windows系统自动登录
编程实现Windows系统自动登录
原理:
通过注册表修改实现。Windows内置了自动登录的机制,在登录系统时,winlogon会检查注册表下有没有设置自动登录,如果设置了就上就会读取用户名和密码,然后进行验证,通过后就登录进系统了。
方法:
注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
键值:
| 键值 |
设置值 |
作用 |
| AutoAdminLogon |
1; |
1表示自动登录,0表示禁止自动登录 |
| DefaultDomainName |
设置值 |
域名,如果没有就留空 |
| DefaultUserName |
abc |
登录系统用的用户名 |
| DefaultPassword |
123 |
登录系统用的用户名使用的密码,如果想加密保存就删除此键值 |
| DontDisplayLastUserName |
1 |
|
注意,下面两个键值必须删除掉,否则会显示一个通知对话框。
- LegalNoticeCaption
- LegalNoticeText
另外还有2个键值,作用分别如下:
- IgnoreShiftOverride 忽略shift键,默认在开机时按shift机会显示登录对话框(即使设置成自动登录),设置成1后,按shift键也没用了。
- AutoLogonCount 设置自动登录次数
- ForceAutoLogon 该值要删除掉
特别注意:
由于密码是明文保存的,很不安全,所以windows中提供了一个秘密的地方来保存加密后的密码,就是在lsa中。sysinternals中autologon工具就是把密码保存进去的。 在Winlogon中,它会先到lsa中用找“DefaultPassword”的信息,找到后就用这个密码,如果找不到就到注册表下去找“DefaultPassword”值。
读写lsa的代码,这个代码是pinvoke.net 中找到的。原文:
http://www.pinvoke.net/default.aspx/advapi32/DefaultPassword.html
其中C++代码由微软提供:http://msdn.microsoft.com/en-us/library/aa378826(VS.85).aspx
C#代码为:http://www.pinvoke.net/default.aspx/advapi32/LsaRetrievePrivateData.html 获取LUAUtil类后,如下调用即可,
LSAutil lsa = new LSAutil("DefaultPassword");
lsa.SetSecret(“abc”);
Console.Write(lsa.GetSecret());