windows核心编程---记录(1)

对象,windows分为用户对象和内核对象.

  

说的最多的就是内核对象.

 

内核对象有很多,进程,文件,管道,and so on.

 

需要记录的只有一个东西:CloseHandle

 

进程,有进程的内核对象,进程的内核对象比此进程的存在周期要常.

 

进程结束的时候它所对应的内核对象并不会立刻结束,而是检查它的计数器(貌似在EPROCESS里面)是否为0,如果是0才会去释放全部资源.

 

这就意味着当一个进程运行的时候,如果别的进程调用了OpenProcess打开了这个进程,那么即使是这个进程退出了,它的内核对象并不会完全释放,因为计数器不为0,还有别的进程有访问权(也就是拿到了句柄),什么时候这个句柄被CloseHandle了,或者那个进程退出了,这个进程才会完全释放资源.

 

我是犯了一个书上说的错误,在CreateProcess后没有CloseHandle断绝与子进程的关系,这也就造成了,只要父进程不退出,子进程即使退出了,它的内核对象永远都不会完全释放资源,从另一面来说就是浪费了资源,不管说这部分资源,内存是否被交换到了硬盘上,反正是浪费,绝对的浪费.

 

特此标记,谨记,有兴趣的朋友可以去参考此书的[第四章---进程]

 

你可能感兴趣的:(windows核心编程---记录(1))