关于Windows:关于Vista中的Mutex对象

About Mutex object in Vista

我的操作系统是启用了UAC的Vista,我在服务器端创建了一个全局Mutex对象,然后我的UI用户界面想要使用具有相同名称的CreateMutex来获取已在服务器中创建的Mutex对象,但是该功能告诉我我 没有访问权限。 我该怎么做?


我认为在您的情况下,您需要通过初始化相应的安全属性来明确允许对互斥锁的全部访问。

尝试以这种方式创建互斥锁(将其视为半伪代码):

1
2
3
4
5
6
7
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
CreateMutex(&sa, ...);

顺便说一句-使用CreateMutex打开现有的互斥锁是可以的。 但是,OpenMutex允许您指定所需的访问级别。

另请注意,如果您需要真正的全局互斥体-您必须在其名称前加上"全局"前缀(请参阅MSDN的"内核对象命名空间"文章)