c++ 使用 OpenProcess() 提升 .exe 的权限
Posted
技术标签:
【中文标题】c++ 使用 OpenProcess() 提升 .exe 的权限【英文标题】:c++ elevating privileges on an .exe using OpenProcess() 【发布时间】:2010-02-18 02:21:22 【问题描述】:我一直在阅读 Hoglund 的一些书,我想我会尝试一下他的“简单调试器”...
反正我一直在尝试用线
hProcess = OpenProcess(PROCESS_ALL_ACCESS | PROCESS_VM_OPERATION, 0, aPID);
每次我在正在运行的进程上使用它时,hProcess 都会返回为 NULL,这是为什么 - 我使用的目标是 notepad.exe 的一个实例。
我可以使用以下方法终止进程没问题:
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, aPID );
我想知道如何提升权限,以及为什么它不起作用。
谢谢,R.
【问题讨论】:
请添加更多上下文 - 您正在运行什么操作系统,调用失败后 GetLastError() 是什么,等等。 我在 windows XP pro service pack 3 上运行。返回的消息是拒绝访问。 【参考方案1】:MSDN 中给出了一种可能性:
Windows Server 2003 和 Windows XP/2000: 大小 PROCESS_ALL_ACCESS 标志增加 Windows Server 2008 和 Windows Vista。 如果为 Windows 编译的应用程序 运行 Server 2008 和 Windows Vista 在 Windows Server 2003 或 Windows 上 XP/2000,PROCESS_ALL_ACCESS 标志 太大而功能 指定此标志失败 ERROR_ACCESS_DENIED。为了避免这种情况 问题,指定最小集合 所需的访问权限 手术。如果 PROCESS_ALL_ACCESS 必须 使用时,将 _WIN32_WINNT 设置为 最低操作系统目标 您的应用程序(例如,#define _WIN32_WINNT _WIN32_WINNT_WINXP)。有关详细信息,请参阅使用 Windows 标头。
您的目标是什么操作系统,PROCESS_ALL_ACCESS 使用了什么值?如果它是 Vista 之前的操作系统,并且您传递的值是 0xFFFF,这可能是问题的原因。
【讨论】:
【参考方案2】:您使用的是 Vista 还是 Windows 7?如果是这样,您需要在二进制文件中嵌入一个UAC manifest 文件。在该清单中将 requestedExecutionLevel
设置为 requireAdministrator
。这应该会让 UAC 提示输入管理员密码,然后尝试提升您的应用程序的权限。
【讨论】:
以上是关于c++ 使用 OpenProcess() 提升 .exe 的权限的主要内容,如果未能解决你的问题,请参考以下文章
c++ OpenProcess() 函数返回值为啥返回NULL 急需解决!!! 邮箱372199852@qq.com
OpenProcess 失败(SeDebugPrivilege?)