- 浏览: 2003708 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
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
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1538__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2827解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1608RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1437使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1183使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 19761、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1476防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5229// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1773VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3687深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 3972原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3096获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7807VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18002SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1895解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7918字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 114821.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2306下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1497BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2409对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与
Windows OS(vista/win7/win8/xp/2000/2003) 不支持Windows 9x 软件功能: 1、MSSQL2000数据库服务开启、关闭控制; 2、基本数据库操作(改密码、数据库新建、删除、分离、附加、备份、恢复); 3、日志和连接...
(4)win7/vista下远程连接到目标主机,已经成功显示了进程列表,但是attach待调试程序时候本地出现提示“Unable to attach the process - 系统找不到指定的文件 ”,这是因为remote debugger权限不足导致,以管理员...
所以如果是Vista以上(比如Win7、8等)的用户,要么关闭UAC,要么每次打开都有UAC烦人的提示。 点击“打开ADSL客户端”按钮,软件会自动搜索安装的客户端并打开,前提是正确安装了“校园翼讯客户端”。 打开客户端后...
好多同学都说在win7下使用了兼容模式8021x.exe这个进程占用内存和CPU极高,内存占用最高时能达到120MB左右,上网时间越长内存占用越多,兼容模式真是疯了! 其实这都是网上流传的的错误设置方法所导致的,其实很...
Anrip.xServer 使用手册 ... ... ... 说明: xServer是业内首家通过CMD界面管理所有服务并实现标准管理接口的集成化WEB...- 添加管理员模式检测,方便Vista/Win7/Win2008用户使用 - 更改Nginx站点配置为: include server/*.inc
大家都知道,windows系统下有多个svchost.exe进程,它是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。 本源码是一个完整的可被svchost.exe启动的DLL服务源码,同时包含了穿透Session0隔离来与桌面交互的源码...
应用平台:for WindowsXp/Windows2003/Vista/Windows7(32 bit)(我只在这四个上面测试过,其他的系统上可能会出现问题) 联系作者: Email: ithurricane@126.com QQ: 20158686 Blog: ...
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,修复...
8.MaxDOS支持 WIN 2K/XP/2003/VISTA/2008,不支持WIN9X/ME,VISTA/2008请下载专用版本. 9.安装MaxDOS时请在解压RAR压缩包后安装,并关闭其它无关程序,避免引起未知的错误. 10.当安装时将启动等待时间设为:0 时,则启动时...
8.MaxDOS支持 WIN 2K/XP/2003/VISTA/2008,不支持WIN9X/ME,VISTA/2008请下载专用版本. 9.安装MaxDOS时请在解压RAR压缩包后安装,并关闭其它无关程序,避免引起未知的错误. 10.当安装时将启动等待时间设为:0 时,则启动时...
如上图所示,此源码用黑月编译的dll文件,在xp、server2003、win7x64、win10x64(管理员权限运行)测试通过,XP以上的系统应该全支持。但并不一定要黑月编译,静态编译也可以的。这个可以用来做什么?毕竟是系统服务...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
� 暂不具备 Push Mail 和 Office(DataViz 、 QuickOffice 计划近期推出 ) 功能,目前主要面向的是普通消费 者 用户,对商业用户支持尚弱。 Android Android Android Android 带来的影响 ANDROID 的推出后可能影响的...