Долго ковырял косячину и, вроде бы, решил вопрос. Но костылем. Хотелось бы понять, как теперь жить
Имеем процесс, стартующий 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);
Я что-то где-то не так сделал или что?