通过windows via C/C++,知道了kernel object,也知道了用完了kernel object之后,要调用CloseHandle。这个函数的作用就是将该kernel object的usage count - 1,当这个count为0的时候,该kernel object会变成signal状态/销毁。
kernel object是不属于process的,是属于windows内核的。process只有一个kernel object handle table,用来存放所有的kernel object handle。所以,多个process可以同时使用一个kernel object -- 只要有handle即可。
那么,对于user object和gdi object呢?他们两者都不属于kernel object(明显的区别就是创建这些object的时候,不需要一个SECURITY_ATTRIBUTE)。他们是一个process拥有的东西。那么,在使用完user object和gdi object之后,需要调用CloseHandle来销毁handle和object本身么?
查阅了MSDN之后,有了了解:不需要。user/gdi object通过相应的函数创建,比如CreateWindowEx,创建一个window user object,同时返回一个handle;当DestroyWindow调用之后,该window user object被销毁,同时对应的handle就将失效。所以,不需要手动调用CloseHandle来销毁user/gdi object。只需配对使用这些object的create方法和destroy方法即可。在MSDN中搜索user object/gdi object就可以查到这两种object的详细说明。
下面附上windows中user object和gdi object的所有的Create和Destroy方法,摘自MSDN。