3.3.3 命名对象
共享跨越进程边界的内核对象的第二种方法是给对象命名。许多(虽然不是全部)内核对

象都是可以命名的。例如,下面的所有函数都可以创建命名的内核对象:

    所有这些函数都有一个共同的最后参数p s z N a m e。当为该参数传递N U L L时,就向系统指
明了想创建一个未命名的(匿名)内核对象。当创建一个未命名的对象时,可以通过使用继承

性(如上一节介绍的那样)或D u p l i c a t e H a n d l e (下一节将要介绍)共享跨越进程的对象。若要按
名字共享对象,必须为对象赋予一个名字。
如果没有为p s z N a m e参数传递M U L L,应该传递一个以0结尾的字符串名字的地址。该名字
的长度最多可以达到M A X PAT H(定义为2 6 0)个字符。但是,M i c r o s o f t没有提供为内核对象
赋予名字的指导原则。例如,如果试图创建一个称为“ J e ff O b j”的对象,那么不能保证系统中
不存在一个名字为“J e ff O b j”的对象。更为糟糕的是,所有这些对象都共享单个名空间。由于
这个原因,对下面这个C r e a t e S e m a p h o r e函数的调用将总是返回N U L L: