对象名称

命名对象为进程提供共享对象句柄的简单方法。 进程创建命名事件、互斥体、信号灯或计时器对象后,其他进程可以使用该名称调用相应的函数(OpenEventOpenMutexOpenSemaphoreOpenWaitableTimer)来打开对象的句柄。 名称比较区分大小写。

事件名称、信号灯、互斥体、可等待计时器、文件映射和作业对象共享同一命名空间。 如果尝试使用另一类型的对象使用的名称创建对象,该函数将失败,GetLastError 返回 ERROR_INVALID_HANDLE。 因此,在创建命名对象时,请使用唯一的名称,并确保检查函数返回值是否存在重复名称错误。

如果尝试使用同一类型的对象使用的名称创建对象,函数会成功,返回现有对象的句柄,GetLastError 返回 ERROR_ALREADY_EXISTS。 例如,如果在调用 CreateMutex 函数中指定的名称与现有互斥体对象的名称匹配,该函数将返回现有对象的句柄。 在这种情况下,对 CreateMutex 的调用等效于对 OpenMutex 函数的调用。 因此,让多个进程对同一互斥体使用 CreateMutex 等效于有一个进程调用 CreateMutex,而另一个进程调用 OpenMutex,只不过它不需要确保首先启动创建进程。 但是,当将此方法用于互斥体对象时,调用进程都不应请求互斥体的直接所有权。 如果多个进程确实请求直接所有权,则很难预测哪个进程实际获取初始所有权。

终端服务环境具有事件、信号灯、互斥体、可等待计时器、文件映射对象和作业对象的全局命名空间。 此外,每个终端服务客户端会话都有其自身的这些对象的单独命名空间。 终端服务客户端进程可以使用具有“Global\”或“Local\”前缀的对象名称来显式创建全局或会话命名空间中的对象。 有关详细信息,请参阅 内核对象命名空间。 快速用户切换是使用终端服务会话实现的(每个用户登录到不同的会话)。 内核对象名称必须遵循终端服务概述的准则,以便应用程序能够支持多个用户。

可以在专用命名空间中创建同步对象。 有关详细信息,请参阅 对象命名空间

使用命名对象