管理员以标准权限运行时

在XP时代,大多数用户都用一个管理员(administrator)帐号来登录Windows
利用这个账户,用户几乎能没有任何限制的访问重要的系统资源,因为该账户被授予了很高的权限,一旦用这个帐号登录了xp以及xp之前的操作系统,Windows操作系统就会创建一个安全令牌(security token).每当有代码试图访问一个受保护的安全资源的时候,操作系统就会使用(出示)这个安全令牌,

从Windows在内的第一个进程开始,这个令牌会与新建的所有进程关联,这样如果新下载了一个恶意程序,就会继承管理员的高权限,------因此可以肆无忌惮的修改机器上的任何内容,甚至启动同一个高特权的进程

那么从vista开始,如果用户使用管理员帐号来登录这样一个被授予高特权的账户登录,那么除了与这个账户登录对应的安全令牌之外,还会创建一个进过筛选的令牌(filtered token)后者只给标准用户的权限(Standard User).以后包括Windows资源管理器在内的第一个进程开始,这个筛选后的令牌会与系统表示最终用户启动启动的所有新进程关联,权限受限制的进程无法访问需要更高权限才能访问的安全资源.

如果 需要管理员权限呢?
-----------------------------------------------------------------------------------------------------------------
首先,我们可以要求操作系统提升权限,但只能是进程边界提升权限

(1)单击右键 Run As Administrator
如果应用程序是操作系统的一部分  那么会显示一个蓝色的横幅
如果引用程序进行了签名,对话框中将显示一个灰色的横幅,表明Windows没有足够的把握来确定应用程序是安全了
如果应用程序没有进行签名,系统会在对话框中显示一个橙色的横幅,并且要求用户谨慎回答
如果用户没有以一个管理员帐号来登录系统,那么Windows会弹出一个要求用户输入管理员权限的帐号密码,这样应用程序才能以管理员权限来运行,这被称为over-the-shoulder登录

(2)manifest文件

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>


如上   被称为一种特殊的资源RT_MANIFEST特殊资源,将其编译到exe资源节区中,系统会按照requestedExecutionLevel节来判断进程的权限,并执行一些操作

requireAdministrator -->应用程序必须以管理员权限启动,否则不会运行
highestAvailable-->应用程序以当前可用的最高权限运行
                        -->如果用户使用管理员帐号登录,就会出现一个要求批准提升权限的对话框
                        -->如果用户使用普通用户账户登录系统,就使用标准权限来启动
asInvoker         -->应用程序以主调应用程序一样的权限来启动

(3).还可以在应用程序的属性对话框中选中对应的复选框

(4)手动提升权限进程的权限
在CreateProcess函数中,没有专门提供神马标记参数来指定对这种权限的提升
相反,我们可以调用ShellExecuteEx函数

BOOL ShellExecuteEx(
    LPSHELLEXECUTEINFO lpExecInfo
);

typedef struct _SHELLEXECUTEINFO{
    DWORD cbSize;
    ULONG fMask;
    HWND hwnd;
    LPCTSTR lpVerb;
    LPCTSTR lpFile;
    LPCTSTR lpParameters;
    LPCTSTR lpDirectory;
    int nShow;
    HINSTANCE hInstApp;
 
    // Optional members
    LPVOID lpIDList;
    LPCSTR lpClass;
    HKEY hkeyClass;
    DWORD dwHotKey;
 union {
  HANDLE hIcon;
  HANDLE hMonitor;
 };
    HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

这个结构体唯一有趣的2个字段是lpVerb和lpFile,前者必须被设置为"runas",后者必须包含使用提升后的权限来启动的一个可执行文件的路径,如下代码:

SHELLEXECUTEINFO sei = {sizeof(SHELLEXECUTEINFO)};
sei.lpVerb = TEXT("runas");
sei.lpFile = TEXT("cmd.exe");
sei.nShow = SW_NORMAL;
if (!ShellExecuteEx(&sei))
{
 DWORD dwStatus = GetLastError();
 if (dwStatus == ERROR_CANCELLED)
 {
  printf("没有以管理员权限运行");
 }
 else
  if(dwStatus == ERROR_FILE_NOT_FOUND)
 {
  printf("没有找到该文件");
 }
}

如果用户拒绝提升权限ShellExecuteEx会返回FALSE,可以通过GetLastError()使用一个ERROR_CANCELLED值来指出这种情况

注意当一个进程使用一个提升后的权限启动时,它每次使用CreateProcess来生成另一个进程时,子进程都会获取和它父进程一样的提升后的权限,假如一个应用程序是使用一个筛选后的令牌来运行的,那么一旦试图调用CreateProcess来生成一个要求提升权限的可执行文件,这个调用就会失败,GetLastError会返回ERROR_ELFVATION_REQUIRED

(5)按钮上显示一个盾牌图标

①.首先我们需要解决的事情是获取当前进程是否以管理员权限运行的.
②.Button_SetElevationRequiredState宏可以帮助我们来设置或者隐藏小盾牌图标
实质上是:
#define Button_SetElevationRequiredState(hwnd, fRequired) (LRESULT)SNDMSG((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired)
SendMessage((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired);
SendMessage(hwnd, 0x160C, 0, 0xFFFFFFFF);
③.在按钮点击事件中使用ShellExecuteEx,以管理员权限重新调用自己


详细代码打包传网盘  请猛点击下面下载 (Win32 SDK)


http://dl.dbank.com/c0rcubga3h

 

 

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 4791 amp; ZOJ 3726 Alice#39;s Print Service (数学 打表)

题目链接&#xff1a; HDU:http://acm.hdu.edu.cn/showproblem.php?pid4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId5072 Problem DescriptionAlice is providing print service, while the pricing doesnt seem to be reasonable, so people using…

夺命雷公狗---ECSHOP---08---商品页的拇改成星星

<strong>用户评价&#xff1a;</strong>{*---------商品评价星星开始----------*}<img src"./images/stars{$goods.comment_rank}.gif" alt"comment rank {$goods.comment_rank}">{*---------商品评价星星结束-------*} 这里主要是要有星…

文件指针

一.移动文件指针 SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod dwMoveMethod 指明移动的模式 FILE_BEGIN 不管文件处于什么地方,总是从文件的头部开始移动,这时的位置参数相当于指定了一个绝对位置 FILE_CURRENT 从当前的文件指针处开始移…

见证下的自我变化-2014全年总结

又是一年总结季&#xff0c;回过头看看看自己的成长&#xff0c;心里真的是满满的喜悦之情…… 一年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的总结博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux学习篇】This virtual machine is configured for 64-bit guest operating systems.……

在学习Linux的基本操作的时候&#xff0c;安装虚拟环境则提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各种拒绝的心理&#xff0c;所以屏蔽了这个错误&#xff0c;但是屏蔽永远也解决不了问题的&#xff0c;所以自己则尝试百度…

图解SSIS监视文件夹并自动导入数据

图解SSIS监视文件夹并自动导入数据 原文:图解SSIS监视文件夹并自动导入数据 演示案例&#xff1a;让系统自动监视文件夹&#xff0c;并把文件夹下面的excel文件导入到sql中&#xff0c;之后清空目录。这个过程以往都需要写程序来实现或者定时执行&#xff0c;现在可以用ssis来订…

DLL转Lib

在C中,为了允许操作符重载和函数重载,C编译器往往按照某种规则改写每一个入口点的符号名,以便使用同一个名字(具有不同的参数类型或者是不同的作用域)有多种不同的用法,而不会打破现有基于C的链接器,.这项技术通常被称为改编(Name Mangling)或者名称修饰(Name Decoration),许多…

WP8手机解锁时提示“请确保IPOVERUSBSVC服务正常运行”解决方法

如果你各种重启服务 卸载手机 重装驱动都试过了还不行&#xff0c;请看看你是否安装了Hyper-v或Vitualbox虚拟机&#xff0c;很有可能是虚拟交换机造成的。 我在网络连接属性里看到这个 把它卸载后&#xff0c;解锁成功。 解锁后记得重新安装卸载的那个网络服务转载于:https://…

Win32路径操作相关API

一.路径截断与合并 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠 "\" PathAddBackslash 在路径最后加上反斜杠 "\" PathRemoveBlanks 去除路径前后的空格 PathAddExtension 在文件路径后面加上扩展名 PathRemoveExtension 去…

Openjudge-计算概论(A)-称体重

描述&#xff1a; 赵、钱、孙、李四个人中既有大人也有小孩&#xff0c;给他们称体重时发现&#xff0c;他们每个人的体重都不一样&#xff0c;且体重&#xff08;单位&#xff1a;公斤&#xff09;恰好是10的整数倍&#xff0c;且他们的体重都不高 于50公斤&#xff0c;已知赵…

浮点数的存储

-------------------------------------------------------------------------------- 在VC6.0----float环境一共32位 其中第一位是符号位 第二到第9位中间8位为小数点位置&#xff08;指数以127的二进制为原点向下为负指数 向上为正指数&#xff09;后面23位为数据位。 S EE…

第二阶段总结

结合第二阶段后3天&#xff0c;我们试用了UI&#xff0c;antionbar&#xff0c;menu等实用&#xff0c;成功的做出了字体的转换&#xff0c;题目的转化等功能。 其实四则运算&#xff0c;说难不难 说易不易&#xff0c;总结出 主要有付出&#xff0c;就有回报。 menu等做的过程…

const 和指针

c用了那么久&#xff0c;觉得 const 和指针配合到一起的时候就会有点点分不出来。 如下: const Data* pData;Data const * pDataData * const pDataconst Data * const pData Data const * const pData是不是有点晕&#xff1f; 我其实用得最多的是 const Data* pData, 也…

Linux 查看系统用户的登录日志

查看用户登录系统的日志有两类日志记录用户登录的行为&#xff0c;一是记录登录者的数据&#xff0c;一个是记录用户的登录时间一&#xff0c;记录用户登录数据/var/log/wtmp日志文件记录用户登录的数据。但这个文件是被编码的文件&#xff0c;不能直接用vi、cat等命令查看&…

Android -- 自定义权限

在android系统的安全模型中&#xff0c;应用程序在默认的情况下不可以执行任何对其他应用程序&#xff0c;系统或者用户带来负面影响的操作。如果应用需要执行某些操作&#xff0c;就需要声明使用这个操作对应的权限。 &#xff08;在manifest文件中 添加标记&#xff09;。 ap…

Win32 路径操作API

路径操作相关API 路径截断与合并函数 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠“\” PathAddBackslash 在路径最后加上反斜杠“\” PathRemoveBlanks 去除路径前后的空格 PathAddExtension 在文件路径后面加上扩展名 Pa…

dbms_output.put_line长度限制问题

dbms_output.put_line长度限制问题对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767. 如果报错buffer overflow, 执行如下语句即可:set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED对于10g以下版本dbms_output.put_line最大长度限制是255.转载于…

js深入研究之Person类案例

<script type"text/javascript"> /* 定义一个Person类 */ function Person(name, age) {this.name name;this.age age; } /* 添加两个方法getName getAge */ Person.prototype {getName: function() {return this.name;},getAge: function() {return this.a…

C++名称粉碎

C name mangling 1: ?0: 构造器&#xff0c;?1 析构器 2: QAE: public __thiscall AAE: private __thiscall QBE: public __thiscall const 3: 返回值和参数类型 B&#xff1a;const D&#xff1a;char E&#xff1a;unsigned char F&#xff1a;…

一款基于css3鼠标经过圆形旋转特效

今天给大家分享一款基于css3鼠标经过圆形旋转特效。当鼠标经过的时候图片边框颜色旋转&#xff0c;图片显示详情。该实例适用浏览器&#xff1a;IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 ht…