如何在python中调用VirtualAllocEx WinAPI?

问题描述 投票:0回答:2

您好,我一直在遵循The poor Man's Process Migration技术来了解流程迁移。但是,每当我打开一个进程时,它都会向我返回0作为进程句柄。

>>> kernel32 = cdll.kernel32
>>> kernel32.OpenProcess()
0
>>> kernel32.OpenProcess('PROCESS_ALL_ACCESS', 0,13036)
0
python windows ctypes kernel32
2个回答
0
投票

第一个参数是数字,而不是字符串。 PROCESS_ALL_ACCESS因目标Windows系统而异。请参见this MSDN link以获取常量和有关其值的讨论(在下面引用):

PROCESS_ALL_ACCESS过程对象的所有可能的访问权限。WindowsServer 2003和Windows XP:在Windows Server 2008和Windows Vista上,PROCESS_ALL_ACCESS标志的大小增加了。如果为Windows Server 2008和Windows Vista编译的应用程序在Windows Server 2003或Windows XP上运行,则PROCESS_ALL_ACCESS标志太大,指定该标志的函数失败,并显示ERROR_ACCESS_DENIED。为避免此问题,请指定操作所需的最小访问权限集。如果必须使用PROCESS_ALL_ACCESS,请将_WIN32_WINNT设置为应用程序所针对的最小操作系统(例如,#define _WIN32_WINNT _WIN32_WINNT_WINXP)。有关更多信息,请参见使用Windows标头。

PROCESS_CREATE_PROCESS(0x0080)创建进程所必需。

PROCESS_CREATE_THREAD(0x0002)创建线程所必需。

PROCESS_DUP_HANDLE(0x0040)使用DuplicateHandle复制句柄。

PROCESS_QUERY_INFORMATION(0x0400)检索有关进程的某些信息所必需,例如其令牌,退出代码和优先级等级(请参阅OpenProcessToken)。

PROCESS_QUERY_LIMITED_INFORMATION(0x1000)检索有关进程的某些信息所必需(请参阅GetExitCodeProcess,GetPriorityClass,IsProcessInJob,QueryFullProcessImageName)。具有PROCESS_QUERY_INFORMATION访问权限的句柄将自动授予PROCESS_QUERY_LIMITED_INFORMATION。Windows Server 2003和Windows XP:不支持此访问权限。

PROCESS_SET_INFORMATION(0x0200)设置有关进程的某些信息,例如其优先级类别(请参阅SetPriorityClass)。

PROCESS_SET_QUOTA(0x0100)使用SetProcessWorkingSetSize设置内存限制所必需。

PROCESS_SUSPEND_RESUME(0x0800)暂停或继续一个过程。

PROCESS_TERMINATE(0x0001)使用TerminateProcess终止进程所需。

PROCESS_VM_OPERATION(0x0008)在进程的地址空间上执行操作所必需(请参阅VirtualProtectEx和WriteProcessMemory)。

PROCESS_VM_READ(0x0010)在使用ReadProcessMemory的进程中读取内存。

PROCESS_VM_WRITE(0x0020)在使用WriteProcessMemory的进程中写入内存所必需。

SYNCHRONIZE(0x00100000L)使用等待功能来等待进程终止。


0
投票

PROCESS_ALL_ACCESS要求您以管理员身份运行代码,以管理员身份运行IDE或终端,您将获得正确的句柄

© www.soinside.com 2019 - 2024. All rights reserved.