可以看到两种不同的提权方式,注意是动态,用代码提权,而不是用清单文件提前处理。

函数都写好了,这里不多做解释。


win32程序:

首先需要这俩头文件,第二个我忘了啥函数要用了,总之出问题加上就对了:(补:获取程序路径的函数)

#include <windows.h>
#include <Shlobj.h>

检测是否以UAC启动:

//返回1为管理员权限,0位普通
BOOL IsUserAdmin(void){
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup);
CheckTokenMembership(NULL,AdministratorsGroup,&b);
FreeSid(AdministratorsGroup);
return(b);
}

主要部分,此处应注意返回值,程序中应在开头这样编写:

  if(IsUserAdmin()){
//is UAC
//什么都不做
}
else{
//not UAC
char path[100];
GetModuleFileName(NULL,path,100); SHELLEXECUTEINFO execinfo;
memset(&execinfo,0,sizeof(execinfo));
execinfo.lpFile =path;
execinfo.cbSize =sizeof(execinfo);
execinfo.lpVerb ="runas";
execinfo.fMask =SEE_MASK_NO_CONSOLE;
execinfo.nShow =SW_SHOWDEFAULT;
//execinfo.lpParameters =NULL; ShellExecuteEx(&execinfo);
CloseHandle(execinfo.hProcess); exit(0);
}

此处的else内就是UAC提权的过程,通过 ShellExecuteEx 函数以UAC权限启动,启动完成后当前程序退出。

我懒得讲解,不明白的可以查微软文档。


控制台程序:

看到没我这么贴心,快来感谢我。

头文件不用多说:

#include <stdio.h>
#include <windows.h>

还是让我多说了,唉,我真是太好了。

控制台的参数可以直接获得程序路径,就不用其它函数了,通常不这么做:

int main(int argc,char const *argv[])

好,下一步直接把这一坨往开头一方,完事:

if(IsUserAdmin()){
//is UAC
//什么都不做
}
else{
//not UAC
char path[100];
GetModuleFileName(NULL,path,100); SHELLEXECUTEINFO execinfo;
memset(&execinfo,0,sizeof(execinfo));
execinfo.lpFile =path;
execinfo.cbSize =sizeof(execinfo);
execinfo.lpVerb ="runas";
execinfo.fMask =SEE_MASK_NO_CONSOLE;
execinfo.nShow =SW_SHOWDEFAULT;
//execinfo.lpParameters =NULL; ShellExecuteEx(&execinfo);
CloseHandle(execinfo.hProcess); exit(0);
}

事了拂衣去,深藏功与名~

【欢迎加入我的qq群:789209269

【动态UAC权限】无盾程序(win32&cmd)的更多相关文章

  1. 如何让Qt程序在运行时获取UAC权限

    在pro文件中加入以下语句: QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\' ...

  2. C# 控制台使用 UAC 权限

    原文:C# 控制台使用 UAC 权限 本文告诉大家如何在 C# 控制台项目使用 UAC 权限.这个方法在 WPF 和 控制台都是可以使用. 右击项目,点击添加文件,找到程序清单 在 WPF 使用 UA ...

  3. Android 动态申请权限问题【转】

    Android 动态申请权限问题 感谢大佬:https://www.jianshu.com/p/2324a2bdb3d4 感谢大佬:https://blog.csdn.net/weixin_42910 ...

  4. .NET中提升UAC权限的方法总结

    [题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权限了,所以在调用很多比较重要的功能时需要 ...

  5. UAC权限

    .NET中提升UAC权限的方法总结   [题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权 ...

  6. 说说Android6.0动态申请权限的那些坑

    白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目 ...

  7. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  8. Spring Security 动态url权限控制(三)

    一.前言 本篇文章将讲述Spring Security 动态分配url权限,未登录权限控制,登录过后根据登录用户角色授予访问url权限 基本环境 spring-boot 2.1.8 mybatis-p ...

  9. 管理员权限运行-C#程序

    C#程序以管理员权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也 ...

随机推荐

  1. IIS在ASP.NET Core下的两种部署模式

    KestrelServer最大的优势体现在它的跨平台的能力,如果ASP.NET CORE应用只需要部署在Windows环境下,IIS也是不错的选择.ASP.NET CORE应用针对IIS具有两种部署模 ...

  2. ros中关于节点、话题、服务以及自定义消息等在终端中的常用命令

    以下面的计算力图说明 节点相关常用命令 在终端中查看项目中有哪些节点命令:rosnode list 有了节点信息想要查看节点中到底发布订阅了哪些话题,作为服务端服务类型或者作为客户端需要的服务类型以上 ...

  3. Tensorflow安装教程(Anaconda)

    写在最前: 在安装过程中遇到很多坑,一开始自己从官网下载了Python3.6.3或者Python3.6.5或者Python3.7.1等多个版本,然后直接pip install tensorflow或者 ...

  4. 16_伯德图_手绘技巧与应用_Bode Plot_Part2

  5. CSS系列——浏览器默认样式

    了解HTML标签在各浏览器当中的默认样式,可以让我们了解,为什么会要写Reset.css,Reset.css当中要怎么写样式最合理.试着思考下面的问题: 为什么会有默认样式? 每个浏览器的默认样式有什 ...

  6. 在TypeScript项目中进行BDD测试

    在TypeScript项目中进行BDD测试 什么是BDD? BDD(Behavior-Driven Design)是软件团队的一种工作方式,通过以下方式缩小业务人员和技术人员之间的差距: 鼓励跨角色协 ...

  7. CentOS系统Tomcat 8.5或9部署SSL证书

    本文档介绍了CentOS系统下Tomcat 8.5或9部署SSL证书的操作说明. 环境准备 操作系统:CentOS 7.6 64位 Web服务器:Tomcat 8.5或9 前提条件 已从阿里云SSL证 ...

  8. 使用cookie/session实现简单的用户信息的保存

    cookie一般用来存储非关键信息 , 用户名和密码等敏感信息一般采用session 来存储:cookie和session的最大区别是当服务器端存储session 之后,用户再次请求时候只是请求了一个 ...

  9. js知识梳理6:关于函数的要点梳理(2)(作用域链和闭包)

    写在前面 注:这个系列是本人对js知识的一些梳理,其中不少内容来自书籍:Javascript高级程序设计第三版和JavaScript权威指南第六版,感谢它们的作者和译者.有发现什么问题的,欢迎留言指出 ...

  10. Spring Boot-场景启动器

    分析上文快速入门 1.查看pom文件导入的依赖(starter的父项目) <parent> <artifactId>spring-boot-starter-parent< ...