OpenMutex in Windows 7 vs 10
От: CyberDemon Россия  
Дата: 02.03.18 13:21
Оценка:
Долго ковырял косячину и, вроде бы, решил вопрос. Но костылем. Хотелось бы понять, как теперь жить

Имеем процесс, стартующий as admin и делающий следующее:

mutex = CreateMutex(NULL, TRUE, name);
// some processing
ReleaseMutex(mutex);


И процесс, стартующий после первого все равно как (обычный юзер или as admin):
mutex = OpenMutex(SYNCHRONIZE | MUTANT_QUERY_STATE, FALSE, name);
//...
DWORD res = WaitForSingleObject(mutex, INFINITE);
//...
ReleaseMutex(mutex)


Все работает отлично в Windows 10, 7 (у себя проверял). Но вдруг начали появляться юзеры с проблемами в 7.
Выяснил, что во втором процессе Wait вешается навечно. То есть, mutex открыт, ошибок нет, но залочить его не можем.
Костыль выглядит так:
// if Windows 7
mutex = CreateMutex(NULL, FALSE, name);


Я что-то где-то не так сделал или что?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.