0

我的操作系统是打开 UAC 的 Vista,我在服务器端创建了一个全局互斥对象,然后我的带有 UI 的 AP 想使用同名的 CreateMutex 来获取已在服务器中创建的互斥对象,但函数告诉我我没有'无权访问它。我该怎么做?

4

1 回答 1

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 的“Kernel Object Namespaces”文章)

于 2009-05-15T16:52:23.373 回答