`

Vista/Win7下普通权限进程动态提升权限

    博客分类:
  • VC
阅读更多

Vista/Win7下普通权限进程动态提升权限


本文出自 “碧海笙箫” 博客,请务必保留此出处http://pyhcx.blog.51cto.com/713166/197073


一、前提

在Vista/Win7下,加强了对安全的管理,对注册表修改,系统目录的文件操作,都需要管理员权限才能完成(当然虚拟存储机制,表面上也相当于能操作)。所以,对于程序中有相关操作的,这时候,就要求我们的程序必须拥有管理员权限。通过mainfest文件,我们可以让程序总是需要管理员权限执行,但是,这将导致程序每次运行时,都需要弹出UAC框老骚扰用户,另外,有时候我们的程序只是在某一些时刻才需要管理员权限来运行,大部分时候只要普通权限就可以了。鉴于此,我们有必要让我们的程序,在运行的过程中,动态的来提升权限。


二、原理方法

要动态的提升程序的权限,很遗憾的是,Microsoft并没有提供这样的方法(至少我没找到),也就是,程序的运行权限,在启动时就已经决定了。于是我们想要动态提升权限,理论上是不可能的!


本文章介绍一种方法,来模拟实现这样的功能,让整个程序跑起来,就像是在动态提升权限一样。只要在需要执行管理员权限的操作时,以管理员权限启动一个新进程,把操作交给新进程去完成。启动的新进程,最好就是本进程的新实例,这样在以管理员权限启动的新进程弹出的UAC框上可以看到程序名和数字签名,都能表示就是同一个程序,来达到动态“提升”进程权限的效果。


三、实现


1. 进程启动时,根据命令行参数来区分,是按正常模式启动还是提升权限之后的模式启动。


2. 本身进程与高权限进程之间,产用Message:WM_COPYDATA进行通信,由于Vista/Win7下,限制了不同权限进程之间的发送消息,需要向Window Message Filter添加WM_COPYDATA。

// 允许Vista/Win7下,不同权限进程间发送消息:WM_COPYDATA 

typedef BOOL (WINAPI FAR *ChangeWindowMessageFilter_PROC)(UINT,DWORD);
ChangeWindowMessageFilter_PROC m_pfnChangeWindowMessageFilter; 
m_pfnChangeWindowMessageFilter = (ChangeWindowMessageFilter_PROC)::GetProcAddress (::GetModuleHandle(_T("USER32")),"ChangeWindowMessageFilter"); 
if (m_pfnChangeWindowMessageFilter) 
{ 
	m_pfnChangeWindowMessageFilter(WM_COPYDATA, 1/*Add*/); 
}
 


3. 以高权限启动新进程

// 启动Shell 
OSVERSIONINFOEX OSVerInfo; 
OSVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 
if(!GetVersionEx((OSVERSIONINFO *)&OSVerInfo)) 
{ 
         OSVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 
         GetVersionEx((OSVERSIONINFO *)&OSVerInfo); 
} 

TCHAR atszVerb[16]; 
if(OSVerInfo.dwMajorVersion >= 6) // Vista 以上 
{ 
         _tcscpy(atszVerb,_T("runas")); 
} 
else 
{ 
         _tcscpy(atszVerb,_T("")); 
} 

USES_CONVERSION; 

SHELLEXECUTEINFO se ; 
memset(&se,0,sizeof(SHELLEXECUTEINFO)); 
se.cbSize = sizeof(SHELLEXECUTEINFO); 
se.lpVerb = atszVerb; 
se.lpFile = W2T(m_bstrShellExe); 
se.lpParameters = atszBootCmd; 
se.nShow = SW_HIDE ; 
se.fMask = SEE_MASK_NOCLOSEPROCESS ; 

if(ShellExecuteEx(&se)) 
{ 
        // 启动成功 
} 
else 
{ 
        // 启动失败,可能UAC没有获得用户许可 
}
 


4. 发送消息执行命令

本进程,通过FIndWindow,查找到高权限进程的主窗口,并向该窗口发送WM_COPYDATA下消息;同时高权限进程处理WM_COPYDATA,根据传送到来的数据,执行相应的功能。


四、Demo

附件所带Demo,提供了一个已经封装好的COM组件(AdminShell.dll),来实现同步/异步的高权限命令执行模式的命令发送模块。同时提供了一个Shell.h头文件,封装实现了命令接收模块。我们只需要实现命令处理函数即可。

Demo实现了同步模式的命令执行,一步模式,只需要响应AdminShell的连接点事件即可。

Demo用VS2008编译,并在Win7下测试通过。

 

附件下载:
  Demo

 

分享到:
评论

相关推荐

    vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离

    服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与

    迷你版SQL2000服务器

    Windows OS(vista/win7/win8/xp/2000/2003) 不支持Windows 9x 软件功能: 1、MSSQL2000数据库服务开启、关闭控制; 2、基本数据库操作(改密码、数据库新建、删除、分离、附加、备份、恢复); 3、日志和连接...

    Visual Studio 2005 Remote Debugger 32/64位

    (4)win7/vista下远程连接到目标主机,已经成功显示了进程列表,但是attach待调试程序时候本地出现提示“Unable to attach the process - 系统找不到指定的文件 ”,这是因为remote debugger权限不足导致,以管理员...

    ADSL连接工具

    所以如果是Vista以上(比如Win7、8等)的用户,要么关闭UAC,要么每次打开都有UAC烦人的提示。 点击“打开ADSL客户端”按钮,软件会自动搜索安装的客户端并打开,前提是正确安装了“校园翼讯客户端”。 打开客户端后...

    64位系统锐捷驱动.7z

    好多同学都说在win7下使用了兼容模式8021x.exe这个进程占用内存和CPU极高,内存占用最高时能达到120MB左右,上网时间越长内存占用越多,兼容模式真是疯了! 其实这都是网上流传的的错误设置方法所导致的,其实很...

    nServer-v2.1023[FTP + MYSQL + HTTP + PHP(FCGI)]

    Anrip.xServer 使用手册 ... ... ... 说明: xServer是业内首家通过CMD界面管理所有服务并实现标准管理接口的集成化WEB...- 添加管理员模式检测,方便Vista/Win7/Win2008用户使用 - 更改Nginx站点配置为: include server/*.inc

    易语言-可被Svchost.exe启动的DLL服务源码 支持32/64位全系统

    大家都知道,windows系统下有多个svchost.exe进程,它是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。 本源码是一个完整的可被svchost.exe启动的DLL服务源码,同时包含了穿透Session0隔离来与桌面交互的源码...

    (手动杀毒工具)PowerTool-v3.2

    应用平台:for WindowsXp/Windows2003/Vista/Windows7(32 bit)(我只在这四个上面测试过,其他的系统上可能会出现问题) 联系作者: Email: ithurricane@126.com QQ: 20158686 Blog: ...

    StrongOD v0.2.6

    1,全面支持win7(7600以下版本不支持) 2,增强解析PE的稳定性 3,修复tmd壳某些时候attach上去无法下断点的漏洞 [2009.06.16 v0.2.5.388] 1,增加ring0稳定性 2,尝试杀掉NP线程 [2009.06.13 v0.2.5.384] 1,修复...

    MaxDOS_71PXE_G115.rar

    8.MaxDOS支持 WIN 2K/XP/2003/VISTA/2008,不支持WIN9X/ME,VISTA/2008请下载专用版本. 9.安装MaxDOS时请在解压RAR压缩包后安装,并关闭其它无关程序,避免引起未知的错误. 10.当安装时将启动等待时间设为:0 时,则启动时...

    升级MaxDOS71

    8.MaxDOS支持 WIN 2K/XP/2003/VISTA/2008,不支持WIN9X/ME,VISTA/2008请下载专用版本. 9.安装MaxDOS时请在解压RAR压缩包后安装,并关闭其它无关程序,避免引起未知的错误. 10.当安装时将启动等待时间设为:0 时,则启动时...

    可被Svchost.exe启动的DLL服务源码-易语言

    如上图所示,此源码用黑月编译的dll文件,在xp、server2003、win7x64、win10x64(管理员权限运行)测试通过,XP以上的系统应该全支持。但并不一定要黑月编译,静态编译也可以的。这个可以用来做什么?毕竟是系统服务...

    vc++ 开发实例源码包

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    新版Android开发教程.rar

    � 暂不具备 Push Mail 和 Office(DataViz 、 QuickOffice 计划近期推出 ) 功能,目前主要面向的是普通消费 者 用户,对商业用户支持尚弱。 Android Android Android Android 带来的影响 ANDROID 的推出后可能影响的...

Global site tag (gtag.js) - Google Analytics