更新时间:2024-06-16 17:25
方法名称:OpenProcess
1.函数原型
HANDLE OpenProcess(
DWORD dwDesiredAccess, //渴望得到的访问权限(标志)
BOOL bInheritHandle, // 是否继承句柄
DWORD dwProcessId// 进程标示符
);
dwDesiredAccess:获取的权限,可分为以下几种
PROCESS_ALL_ACCESS:获取所有权限
PROCESS_CREATE_PROCESS:创建进程
PROCESS_CREATE_THREAD:创建线程
PROCESS_DUP_HANDLE:使用DuplicateHandle()函数复制一个新句柄
PROCESS_QUERY_INFORMATION:获取进程的令牌、退出码和优先级等信息
PROCESS_QUERY_LIMITED_INFORMATION:获取进程特定的某个信息
PROCESS_SET_INFORMATION:设置进程的某种信息
PROCESS_SET_QUOTA:使用SetProcessWorkingSetSize函数设置内存限制
PROCESS_SUSPEND_RESUME:暂停或者恢复一个进程
PROCESS_TERMINATE:使用Terminate函数终止进程
PROCESS_VM_OPERATION:在进程的地址空间执行操作
PROCESS_VM_READ:使用ReadProcessMemory函数在进程中读取内存
PROCESS_VM_WRITE:使用WriteProcessMemory函数在进程中写入内存
SYNCHRONIZE:使用wait函数等待进程终止
bInheritHandle:TRUE或者FALSE
dwProcessId:pid
2.返回值:
如成功,返回值为指定进程的句柄。
如失败,返回值为空,可调用GetLastError获得错误代码。
-------------------------------------------------------------
3.举例
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID );
----------------------
4.附:
BOOL ReadProcessMemory( HANDLE hProcess, PVOID pvAddressRemote, PVOID pvBufferLocal, DWORD dwSize, PDWORD pdwNumBytesRead);
参数
hProcess //为远程进程的句柄
pvAddressRemote //用于指明远程进程中的地址
pvBufferLocal //是本地进程中的内存地址
dwSize //是需要传送的字节数
pdwNumBytesRead和pdwNumBytesWritten //用于指明实际传送的字节数.当函数返回时,可以查看这两个参数的值.
1.VB声明
Declare Function OpenProcesskernel32Alias
说明
打开一个现有进程的句柄
2.返回值
Long,如执行成功,返回进程句柄;零表示失败。会设置GetLastError
3.参数表
参数 类型 及 说明
dwDesiredAccess Long,指定这个句柄要求的访问方法。指定API32.TXT文件中以PROCESS_???开头的一个或多个常数
bInheritHandle Long,如句柄能够由子进程继承,则为TRUE
dwProcessId Long,要打开那个进程的进程标识符
4.注解
这个函数经常用来打开一个要进行同步的进程(同步:即步调协同,你说完,我再说,按说好的先后次序来)
5.举例
ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF=2035711
Dim hProcess As Long
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) '打开进程
If hProcess Then ReadProcessMemory hProcess, ByVal &H12F82C, base, 4, 0& '读写进程内存
CloseHandle hProcess '关闭进程句柄
End If
var
begin
GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @PID);//获取c的PID
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);//打开进程
Inject(ProcessHandle, @Main);//插入代码
CloseHandle(ProcessHandle);//关闭线程句柄
end.
语法
OpenProcess(
dwDesiredAccess: DWORD; {access flags}
bInheritHandle: BOOL; {handle inheritance flag}
dwProcessId: DWORD {the process identifier}
): THandle; {returns the handle of the open process}
说明:
OpenProcess函数执行成功将根据传入参数的PID返回该PID进程的句柄.执行失败返回0.执行失败的错误信息请使用GetLastError 函数.
参数说明:
dwDesiredAccess: 指定打开后,该进程的访问权限
PROCESS_ALL_ACCESS 给予进程所有可能允许的权限.
PROCESS_DUP_HANDLE允许使用DuplicateHandle函数进行进程句柄的复制操作.
PROCESS_QUERY_INFORMATION允许函数GetExitCodeProcess 或函数GetPriorityClass functions 查询进程的信息时使用该句柄.
PROCESS_SET_INFORMATION允许函数SetPriorityClass使用此句柄进行优先级设置.
PROCESS_TERMINATE允许函数TerminateProcess 使用此句柄关闭进程.
PROCESS_VM_OPERATION 允许函数VirtualProtectEx使用此句柄修改进程的虚拟内存.
PROCESS_VM_READ or PROCESS_VM_WRITE 允许函数访问和写入权限
SYNCHRONIZE Windows NT 专用: 允许同步函数使用此句柄.
bInheritHandle: 指定返回的句柄是继承dwProcessId指定的进程..
dwProcessId:指定打开需要打开的进程的PID.
.版本 2
.参数 dwDesiredAccess, 整数型, , 渴望得到的访问权限(标志)
.参数 bInheritHandle, 逻辑型, , 是否继承句柄
.参数 dwProcessId, 整数型, , 进程标识符