Windows vista以上模拟Alt Ctrl Delete

  之前客户要求我们能够在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

原文地址:https://www.cnblogs.com/doutu/p/4892726.html