1、内核对象由内核管理,内核对象的数据结构只能由内核访问。
2、内核对象由内核所拥有,而不是进程,所以内核对象并不随进程的终止而终止。每个内核对象都有一个计数器,每个进程使用一个内核对象,则计数器加1,停止使用则减一,直到计数器为0,内核才会撤销这个内核对象。
3、创建内核对象的函数都有一个安全属性结构的参数SECURITY_ATTRIBUTES。这是区别创建的对象是属于内核对象还是用户对象或者GDI对象的方法。
4、进程初始化时,系统会为其创建一个句柄表。该句柄表只用于内核对象,而不用于用户对象和GDI对象。进程初次初始化时,句柄表是空,当进程中的线程调用创建内核对象的函数是,就会在句柄表中扫描,寻找合适的位置。然后分配一个句柄指向这个位置。所以这个句柄是和进程相关的,在其他进程中使用会出错。
5、一个注意点:一般创建内核对象失败返回的是NULL,但CreateFile失败返回的是-1,即INVALID_HANDLE_VALUE。所以检查该函数失败时应该是
HANDLE hMutex=CreateFile(...)
if(hMutex==INVALIE_HANDLE_VALUE)
6、跨越进程边界的共享内核对象:待续
而不是if(hMutex==NULL)
文章引用自: