VC++中程序提升管理员权限的两种方法

程序的权限不够,应用管理员权限打开程序运行方可。

如何使vc程序运行时请求管理员权限?

如果是2005或者2008 就简单了,直接

(项目右键—属性—连接器—清单文件—uac执行级别 选择requireAdministrator )中文版

(project->property->Configuration Properties->Linker->Manifest File->UAC  Execution Level 选择requireAdministrator)英文版

重新编译 这样你的程序直接运行就拥有管理员权限了。 

代码提权


   
   
 
  1. /****************************************************************
  2. 本类功能:提升本程序进程优先级和权限
  3. 编写作者:Coderui
  4. 编写日期:2008年03月24日
  5. 联系邮箱:coderui@163.com
  6. 作者博客:http://hi.baidu.com/coderui
  7. 文件名称:EnablePriv.h
  8. ****************************************************************/
  9. class CEnablePriv
  10. {
  11. public: //公有(对外开放的接口)
  12. //
  13. //设置当前进程优先级为最高(实时)
  14. //
  15. BOOL SetRealTimePriority();
  16. //
  17. //提升当前进程权限函数(“SeShutdownPrivilege”关机权限)
  18. //
  19. BOOL EnableShutdownPriv();
  20. //
  21. //提升当前进程权限函数(“SeDebugPrivilege”读、写控制权限)
  22. //
  23. BOOL EnableDebugPriv();
  24. //
  25. //提升当前进程权限函数(“SeBackupPrivilege”注册表备份权限)
  26. //
  27. BOOL EnableBackupPriv();
  28. //
  29. //提升当前进程权限函数(“SeRestorePrivilege”恢复数据权限)
  30. //
  31. BOOL EnableRestorePriv();
  32. private: //私有(内部使用的接口)
  33. };
  34. ——————————————————————————————————————————
  35. /****************************************************************
  36. 本类功能:提升本程序进程优先级和权限
  37. 编写作者:Coderui
  38. 编写日期:2008年03月24日
  39. 联系邮箱:coderui@163.com
  40. 作者博客:http://hi.baidu.com/coderui
  41. 文件名称:EnablePriv.cpp
  42. ****************************************************************/
  43. #include “stdafx.h” //需要引用MFC中的这个头文件
  44. #include “EnablePriv.h” //调用时需要引用的联接头文件
  45. //宏的功能介绍:
  46. //————————————————————-
  47. //#define SE_BACKUP_NAME TEXT(“SeBackupPrivilege”) //备份数据权限
  48. //#define SE_RESTORE_NAME TEXT(“SeRestorePrivilege”) //恢复数据权限
  49. //#define SE_SHUTDOWN_NAME TEXT(“SeShutdownPrivilege”) //关机权限
  50. //#define SE_DEBUG_NAME TEXT(“SeDebugPrivilege”) //读、写控制权限
  51. //————————————————————-
  52. //宏的功能介绍:
  53. //————————————————————-
  54. //ABOVE_NORMAL_PRIORITY_CLASS(0x00008000) 高于标准
  55. //BELOW_NORMAL_PRIORITY_CLASS(0x00004000) 低于标准
  56. //HIGH_PRIORITY_CLASS(0x00000080) 高
  57. //IDLE_PRIORITY_CLASS(0x00000040) 低
  58. //NORMAL_PRIORITY_CLASS(0x00000020) 标准
  59. //REALTIME_PRIORITY_CLASS(0x00000100) 实时
  60. //————————————————————-
  61. //
  62. //设置当前进程优先级为最高(实时)
  63. //
  64. //返回值:“false”是失败,“true”是成功。
  65. BOOL CEnablePriv::SetRealTimePriority()
  66. {
  67. if( ! SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ))
  68. {
  69. return false;
  70. }
  71. return true;
  72. }
  73. //
  74. //提升当前进程权限函数(“SeShutdownPrivilege”关机权限)
  75. //
  76. //返回值:“false”是失败,“true”是成功。
  77. BOOL CEnablePriv::EnableShutdownPriv()
  78. {
  79. HANDLE hToken;
  80. LUID sedebugnameValue;
  81. TOKEN_PRIVILEGES tkp;
  82. if ( ! OpenProcessToken( GetCurrentProcess(),
  83. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
  84. return false;
  85. if ( ! LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &sedebugnameValue ) )
  86. {
  87. CloseHandle( hToken );
  88. return false;
  89. }
  90. tkp.PrivilegeCount = 1;
  91. tkp.Privileges[ 0].Luid = sedebugnameValue;
  92. tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
  93. if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  94. CloseHandle( hToken );
  95. return true;
  96. }
  97. //
  98. //提升当前进程权限函数(“SeDebugPrivilege”读、写控制权限)
  99. //
  100. //返回值:“false”是失败,“true”是成功。
  101. BOOL CEnablePriv::EnableDebugPriv()
  102. {
  103. HANDLE hToken;
  104. LUID sedebugnameValue;
  105. TOKEN_PRIVILEGES tkp;
  106. if ( ! OpenProcessToken( GetCurrentProcess(),
  107. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
  108. return false;
  109. if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
  110. {
  111. CloseHandle( hToken );
  112. return false;
  113. }
  114. tkp.PrivilegeCount = 1;
  115. tkp.Privileges[ 0].Luid = sedebugnameValue;
  116. tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
  117. if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  118. CloseHandle( hToken );
  119. return true;
  120. }
  121. //
  122. //提升当前进程权限函数(“SeBackupPrivilege”备份数据权限)
  123. //
  124. //返回值:“false”是失败,“true”是成功。
  125. BOOL CEnablePriv::EnableBackupPriv()
  126. {
  127. HANDLE hToken;
  128. LUID sedebugnameValue;
  129. TOKEN_PRIVILEGES tkp;
  130. if ( ! OpenProcessToken( GetCurrentProcess(),
  131. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
  132. return false;
  133. if ( ! LookupPrivilegeValue( NULL, SE_BACKUP_NAME, &sedebugnameValue ) )
  134. {
  135. CloseHandle( hToken );
  136. return false;
  137. }
  138. tkp.PrivilegeCount = 1;
  139. tkp.Privileges[ 0].Luid = sedebugnameValue;
  140. tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
  141. if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  142. CloseHandle( hToken );
  143. return true;
  144. }
  145. //
  146. //提升当前进程权限函数(“SeRestorePrivilege”恢复数据权限)
  147. //
  148. //返回值:“false”是失败,“true”是成功。
  149. BOOL CEnablePriv::EnableRestorePriv()
  150. {
  151. HANDLE hToken;
  152. LUID sedebugnameValue;
  153. TOKEN_PRIVILEGES tkp;
  154. if ( ! OpenProcessToken( GetCurrentProcess(),
  155. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
  156. return false;
  157. if ( ! LookupPrivilegeValue( NULL, SE_RESTORE_NAME, &sedebugnameValue ) )
  158. {
  159. CloseHandle( hToken );
  160. return false;
  161. }
  162. tkp.PrivilegeCount = 1;
  163. tkp.Privileges[ 0].Luid = sedebugnameValue;
  164. tkp.Privileges[ 0].Attributes = SE_PRIVILEGE_ENABLED;
  165. if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  166. CloseHandle( hToken );
  167. return true;
  168. }

            </div>
    原文作者:高傲的三师兄
    原文地址: https://blog.csdn.net/xunying6967/article/details/82656963
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞