c ++使用OpenProcess()提升.exe上的权限

时间:2010-02-18 02:21:23

标签: c++ visual-studio visual-studio-2008

我一直在阅读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。

2 个答案:

答案 0 :(得分:3)

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,则可能是问题的原因。

答案 1 :(得分:1)

您使用的是Vista还是Windows 7?如果是这样,您需要在二进制文件中嵌入UAC manifest文件。在该清单中将requestedExecutionLevel设置为requireAdministrator。这应该使UAC提示输入管理员密码,然后尝试提升应用程序的权限。