WindowsAPI详解——OpenProcess 打开|获得进程句柄 - [VC++编程]
2014-07-26 16:25
429 查看
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://www.blogbus.com/flyxxtt-logs/43752726.html
在获得进程可执行文件路径的几种方法中曾使用了OpenProcess来获得进程的句柄,今天就详细介绍下这个函数。
函数原型:
HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)
参数说明:
1、dwDesiredAccess:想拥有的该进程访问权限
PROCESS_ALL_ACCESS //所有能获得的权限
PROCESS_CREATE_PROCESS //需要创建一个进程
PROCESS_CREATE_THREAD //需要创建一个线程
PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄
PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级
PROCESS_QUERY_LIMITED_INFORMATION /*获得某些信息的权限,如果获得了PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限*/
PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级
PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSize
PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限
PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcess
PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory)
PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemory
PROCESS_VM_WRITE //读取进程内存空间的权限,可使用WriteProcessMemory
SYNCHRONIZE //等待进程终止
2、bInheritHandle:表示所得到的进程句柄是否可以被继承
3、dwProcessId:被打开进程的PID
返回值:
如果函数调用成功将返回一个进程句柄值,否则将返回NULL
注意:在使用完所获得的进程句柄后一定要调用CloseHandle(handle)来关闭进程的句柄。
使用的例子在前面的文章中已经写出了。在使用此函数时会发现不能成功获得有些系统进程的句柄,原因是没有权限。解决办法是在调用此函数前让我们的进程得到SeDebugPrivilege权限。
http://www.blogbus.com/flyxxtt-logs/43752726.html
在获得进程可执行文件路径的几种方法中曾使用了OpenProcess来获得进程的句柄,今天就详细介绍下这个函数。
函数原型:
HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)
参数说明:
1、dwDesiredAccess:想拥有的该进程访问权限
PROCESS_ALL_ACCESS //所有能获得的权限
PROCESS_CREATE_PROCESS //需要创建一个进程
PROCESS_CREATE_THREAD //需要创建一个线程
PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄
PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级
PROCESS_QUERY_LIMITED_INFORMATION /*获得某些信息的权限,如果获得了PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限*/
PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级
PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSize
PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限
PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcess
PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory)
PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemory
PROCESS_VM_WRITE //读取进程内存空间的权限,可使用WriteProcessMemory
SYNCHRONIZE //等待进程终止
2、bInheritHandle:表示所得到的进程句柄是否可以被继承
3、dwProcessId:被打开进程的PID
返回值:
如果函数调用成功将返回一个进程句柄值,否则将返回NULL
注意:在使用完所获得的进程句柄后一定要调用CloseHandle(handle)来关闭进程的句柄。
使用的例子在前面的文章中已经写出了。在使用此函数时会发现不能成功获得有些系统进程的句柄,原因是没有权限。解决办法是在调用此函数前让我们的进程得到SeDebugPrivilege权限。
相关文章推荐
- WindowAPI 详解--OpenProcess打开获得进程句柄
- VC根据进程ID获得主窗口句柄(不是进程句柄)
- MFC方法OpenProcess打开一个已存在的进程对象,并返回进程的句柄
- WindowsAPI使用详解——GetVersion|GetVersionEx 获取操作系统版本和名称 - [VC++编程]
- VC 根据线程句柄获得线程ID 根据线程句柄获得进程ID
- WindowsAPI详解——获得进程可执行文件路径的几种方法
- WindowsAPI详解——获得进程可执行文件路径的几种方法
- WindowsAPI详解——获得进程可执行文件路径的几种方法
- 返回值是新的进程句柄的只有:打开进程()、创建进程()两个命令,创建进程()命令详解
- VC根据进程ID获得主窗口句柄(不是进程句柄)
- 求VC版本如何利用WMI获得磁盘信息 VC/MFC / 进程/线程/DLL - 社区 community.csdn.net
- VC由进程ID获取窗口句柄
- UNIX环境高级编程学习之第八章进程控制-用父子进程实现打开kate,返回kate关闭状态
- eVC编程遇到的各种问题之——进程的打开和关闭
- VC菜单命令详解(文件打开、保存与关闭)
- VC菜单命令详解(文件打开、保存与关闭)
- VC++中如何获得一个当前进程的运行目录
- 通过进程ID获得该进程主窗口的句柄
- 根据进程ID枚举所有窗口获得窗口句柄
- VC 创建新进程,结束进程 (打开exe等可执行文件)