术语:
1、使用计数:记录内核对象被使用的次数,如果计数为0对象已被销毁,相当于CloseHandle()。
2、内核对象的安全:内核对象可以用一个安全描述符(SD)保护。谁拥有、谁可以访问、谁可以使用、谁拒绝访问等。
3、进程内核对象句柄表:当进程初始化时,系统为它分配一个句柄表。
4、跨进程边界共享内核对象:不同进程中运行的线程需要共享内核对象。
方法1、使用对象句柄继承-----创建进程时对SECURITY_ATTRIBUTES的bInheritHandle成员初始化为TRUE.
方法2、改变句柄的标识-----调用SetHandleInformation函数对指定的内核对象改变它的继承标识。
方法3、为对象命名-------创建内核对象时,对创建内核对象的函数的最后一个参数赋予一个字符串也就是内核对象的名字
方法4、终端服务命名空间--------名称中可以加入"Global\"或是"Local\"的前缀,这样可以明确的将对象创建在全局的或事务的命名空间。名称的其它部分除了反斜杠.
方法5、专有命名空间
方法6、复制对象句柄-------调用DuplicateHandle函数,它可以获取一个句柄表中的一项纪录。
创建唯一实例:
hMutex=CreateMutex(NULL,FALES,"ticket");
if(hMutex)
{
if (GetLastError()==ERROR_ALREADY_EXISTS)
{
printf("实例已经存在");
}
}