之前客户要求我们能够在windows登陆界面能够用指定账户批量控制机器登陆,然后用windows credentials provider(vista以上,xp需要用Gina)实现了这个功能,这期间遇到了一些问题:
如果用户加入域之后,再重新进入登陆界面,就需要按安全序列也就是Alt Contrl Delete,这个由于比较特殊一直没有模拟成功,采用了注册表的方式,禁用了这安全序列,这个方法并不完美,因为每次重新加入域后,对应注册表的键值都会被重写,设置为默认,就是需要输入安全序列。后面客户要求这个SAS不能被禁用,没办法只好找其他的法子了。研究了下vnc的代码,发现它是用api sendsas
实现的,之前也查到这个api,没有认真读文档,一直没试验成功,后面发现原来是需要签名的,看来还是要认真读文档。另外还有一点就是还要修改组策略使其服务或程序能够模拟SAS(详见MSDN)。代码很简单
HMODULE hmodule=LoadLibrary(L"sas.dll"); SendSas s=(SendSas)GetProcAddress(hmodule,"SendSAS"); if (s) { s(true)//(or false ); }
启用SAS
1 Windows Registry Editor Version 5.00 2 3 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon] 4 "DisableCAD"=dword:00000000 5 6 [HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWinlogon] 7 "DisableCAD"=- 8 9 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem] 10 "DisableCAD"=- 11 12 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem] 13 "DisableCAD"=-
禁用SAS
1 Windows Registry Editor Version 5.00 2 3 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon] 4 "DisableCAD"=dword:00000001 5 6 [HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWinlogon] 7 "DisableCAD"=- 8 9 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem] 10 "DisableCAD"=- 11 12 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem] 13 "DisableCAD"=-
参考MSDN SendSAS说明
https://msdn.microsoft.com/en-us/library/windows/desktop/dd979761(v=vs.85).aspx
csdn上的一篇文章
http://blog.csdn.net/chenyujing1234/article/details/8286492