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

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


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. 4.3 ROS工作空间覆盖

    4.3 ROS工作空间覆盖 所谓工作空间覆盖,是指不同工作空间中,存在重名的功能包的情形. ROS 开发中,会自定义工作空间且自定义工作空间可以同时存在多个,可能会出现一种情况: 虽然特定工作空间内的 ...

  2. H5移动端开发

    开发前准备 环境: Node.js LTS版本 git 最新版 文档: 本项目技术栈基于 ES2016 VueJS vux 快速开始 1.克隆项目 git clone https://gitee.co ...

  3. java中什么叫多重捕获MultiCatch,它的用法是怎样的?

    2.多重捕获MultiCatch 马克-to-win:什么叫多重捕获MultiCatch?一段代码可能引起多个异常,这时可以定义两个或更多的catch子句来处理这种情况,每个子句捕获一种类型的异常.马 ...

  4. JSTL详解(常用标签以及c:forEach遍历集合)

    JSTL标签 一. JSTL的简介 1. 什么是JSTL 2. JSTL常用标签库 3. JSTL使用步骤 二. 核心标签库常用标签 1. c: set 标签 2. c: out 标签 3. c: i ...

  5. Git使用方法以及出现的bug解决方案

    git常用命令 1.本地库初始化: git init 2.设置签名 (1)项目级别(项目里面) git config user.name xxx git config user.email xxx ( ...

  6. Python raise...from... 是啥?

    调试程序时看某些库的源代码,发现有如下代码读不懂,不理解后面这个from干什么用的. try: ... except KeyError: raise **Error('') from None try ...

  7. 爬虫---scrapy全站爬取

    全站爬取1 基于管道的持久化存储 数据解析(爬虫类) 将解析的数据封装到item类型的对象中(爬虫类) 将item提交给管道, yield item(爬虫类) 在管道类的process_item中接手 ...

  8. Java中的List接口实现类LinkedList

    package collection; import java.util.LinkedList; /* * 1.implement List接口 * 2.底层是一个链表结构:查询慢,增删快 * 注意: ...

  9. 小程序容器技术,App热更新与敏捷开发新方案

    作为追求代码洁癖的软件工程师,我们对"紧耦合"的技术实现可以说是深恶痛绝.要解决当前企业移动端App日益沉重.难以真正迭代.投入产出比低的问题,首先在技术架构上要实现真正的&quo ...

  10. QT-notepad++仿写

    最近小忙,准备学习下FFMPEG 涉及:工具栏使用,QAction,文件基本读写操作 Github地址:https://github.com/wsdassssss/notepad-