Об объекте Mutex в Vista - PullRequest
0 голосов
/ 15 мая 2009

Моя ОС - Vista с включенным UAC, я создаю глобальный объект Mutex на стороне сервера, затем моя точка доступа с пользовательским интерфейсом хочет использовать CreateMutex с тем же именем, чтобы получить объект Mutex, который был создан на сервере, но функция сообщает я не имею права доступа к нему. Как я могу это сделать?

1 Ответ

5 голосов
/ 15 мая 2009

Я думаю, что в вашем случае вам нужно явно разрешить полный доступ к вашему мьютексу через инициализацию соответствующих атрибутов безопасности.

Попробуйте создать мьютекс следующим образом (рассмотрите его как полупсевдокод):

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 "Пространства имен объектов ядра")

...