关于Vista中的Mutex对象

时间:2009-05-15 16:03:27

标签: windows winapi windows-vista uac

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

1 个答案:

答案 0 :(得分:5)

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

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

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允许您指定所需的访问级别。

另请注意,如果您需要一个真正的全局互斥锁 - 您必须在其名称后加上“Global \”(请参阅​​MSDN的“内核对象命名空间”文章)