• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于获取进程句柄的问题

mysql 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

使用CreateProcess创建一个 进程 后,PROCESS_INFORMATION结构中会包含 进程 的handle,和唯一存在的 进程 ID 而后使用openprocess打开 进程 时,根据第一个参数 (dwDesiredAccess:想拥有的该 进程 访问权限 PROCESS_ALL_ACCESS //所有能获得的权限 PROCES

<link href=”/js/s本文来源gaodaimacom搞#^代%!码网@yntaxhighlighter/SyntaxHighlighter.css” rel=”stylesheet” type=”text/css” />

使用CreateProcess创建一个进程后,PROCESS_INFORMATION结构中会包含进程的handle,和唯一存在的进程ID

而后使用openprocess打开进程时,根据第一个参数

(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 //等待进程终止

的不同,返回的句柄值是不同的,而且绝对不等于PROCESS_INFORMATION中的句柄值

当程序不关闭时,用OpenProcess获取同一个进程,每次也都能得到不同的句柄值

因为OpenProcess返回的句柄是系统临时给分配的操作句柄。当你没用CloseHandle(hand)关闭这个句柄,再次调用OpenProcess获取句柄时,他又会分配一个新的句柄给你。相当于2个句柄都指向的同一个进程

实质上这些“进程句柄”其实不是真正的进程句柄,而是进程句柄在“句柄表”中的索引(偏移),真正的进程句柄保存在进程句柄表中

若在每次句柄使用过后,关闭句柄即CloseHandle,则用OpenProcess获取同一个进程就可得到同样的句柄值

每个进程都有句柄表。该表的第一项就是进程自己的句柄,这也是为什么调用GetCurrentProcess()总是返回0x7FFFFFFF的原因。

转自:http://blog.gaodaima.com/lovelyloulou/article/details/5252288


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于获取进程句柄的问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址