关于进程内核对象和线程内核对象的问题

时间:2021-11-04 17:34:01
请问,某进程的句柄表中是否保存着其进程内核对象和线程内核对象的相关信息呢?

12 个解决方案

#1


已经确定进程内核对象的相关信息不在其进程的句柄表中了,不知道线程的尤其是主线程的内核对象信息是否在句柄表中呢?

#2


可以看看ProcessEntry32

#3


都没有人鸟我…… 给的分数太少了?

#4


应该不在,保存在系统的句柄表中。

#5


引用 4 楼 lijianli9 的回复:
应该不在,保存在系统的句柄表中。

嗯呐,谢谢你的回答,我也是这样猜测的,只是尚未找到官方资料证实自己的想法。

#6


看看 windows核心编程 内核对象

每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。
内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容。

当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,你的进程中的任何线程都可以使用这个值。将这个句柄传递给Wi n d o w s 的各个函数,这样,系统就能知道你想操作哪个内核对象。

#7


引用 6 楼 fengqinqdca 的回复:
看看windows核心编程 内核对象

每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。
内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容。

当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,……

谢谢你的回答,另外核心编程那本书的第三章我都看过好多遍了,其中没有特别提及到进程和线程的句柄,我想知道的是进程和线程的句柄。

#8


引用 2 楼 tiger9991 的回复:
可以看看ProcessEntry32

谢谢你的回答。

#9


其他进程的句柄一定在句柄表里,自己进程线程通过传-1访问,至少内核对象的引用计数加一了,目测不再句柄表里

#10


引用 9 楼 myjisgreat 的回复:
其他进程的句柄一定在句柄表里,自己进程线程通过传-1访问,至少内核对象的引用计数加一了,目测不再句柄表里

嗯呐,有可能是系统本身维护了一个句柄表,表中存储了所有进程和线程的句柄,用于统一管理所有的进程和线程(比如优先级和调度管理)。

#11


存储了所有进程和线程的句柄的数据结构叫做eprocess 和ethread
只能在内核模式下读取,你可以研究下,不过和你问的应该没太多关系
现在想想,自己线程和进程应该在不在句柄表里,饿…好像是在windows内核情景分享这本书里的对象管理这一章里提到,如果句柄是-1,系统做了特殊处理,不经过句柄表的

#12


我错了…eprocess就是进程句柄指向的内核对象…他不是句柄,而是真正的实际操作进程的
每个进程都有自己的句柄表,进程句柄不是全局的,不是整个系统统一一起维护的

#1


已经确定进程内核对象的相关信息不在其进程的句柄表中了,不知道线程的尤其是主线程的内核对象信息是否在句柄表中呢?

#2


可以看看ProcessEntry32

#3


都没有人鸟我…… 给的分数太少了?

#4


应该不在,保存在系统的句柄表中。

#5


引用 4 楼 lijianli9 的回复:
应该不在,保存在系统的句柄表中。

嗯呐,谢谢你的回答,我也是这样猜测的,只是尚未找到官方资料证实自己的想法。

#6


看看 windows核心编程 内核对象

每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。
内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容。

当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,你的进程中的任何线程都可以使用这个值。将这个句柄传递给Wi n d o w s 的各个函数,这样,系统就能知道你想操作哪个内核对象。

#7


引用 6 楼 fengqinqdca 的回复:
看看windows核心编程 内核对象

每个内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。
内核对象的数据结构只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变它们的内容。

当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,……

谢谢你的回答,另外核心编程那本书的第三章我都看过好多遍了,其中没有特别提及到进程和线程的句柄,我想知道的是进程和线程的句柄。

#8


引用 2 楼 tiger9991 的回复:
可以看看ProcessEntry32

谢谢你的回答。

#9


其他进程的句柄一定在句柄表里,自己进程线程通过传-1访问,至少内核对象的引用计数加一了,目测不再句柄表里

#10


引用 9 楼 myjisgreat 的回复:
其他进程的句柄一定在句柄表里,自己进程线程通过传-1访问,至少内核对象的引用计数加一了,目测不再句柄表里

嗯呐,有可能是系统本身维护了一个句柄表,表中存储了所有进程和线程的句柄,用于统一管理所有的进程和线程(比如优先级和调度管理)。

#11


存储了所有进程和线程的句柄的数据结构叫做eprocess 和ethread
只能在内核模式下读取,你可以研究下,不过和你问的应该没太多关系
现在想想,自己线程和进程应该在不在句柄表里,饿…好像是在windows内核情景分享这本书里的对象管理这一章里提到,如果句柄是-1,系统做了特殊处理,不经过句柄表的

#12


我错了…eprocess就是进程句柄指向的内核对象…他不是句柄,而是真正的实际操作进程的
每个进程都有自己的句柄表,进程句柄不是全局的,不是整个系统统一一起维护的