Повышение named_mutex не может быть общим для процессов, созданных разными пользователями - PullRequest
0 голосов
/ 07 февраля 2012

У меня проблема с разделением надстройки с именем mutex между процессами, которые создаются разными пользователями. Первый процесс создается службой, которая входит в систему как LocalSystem. Второй процесс создан мной (просто выполните процесс как обычно).

Оба процесса запускают эту функцию (C ++):

void MyFunc()
{
   //Open or create the named mutex
   named_mutex mutex(open_or_create, "mymutex");
   {
      scoped_lock<named_mutex> lock(mutex);
      DoSomeWork();
   }
   named_mutex::remove("mymutex");
}

В настоящее время я наблюдаю, что оба процесса могут одновременно вводить DoSomeWork (). Эта проблема не будет возникать только при входе службы в систему как «я», а затем я запускаю второй процесс как администратор.

Есть ли способ решить эту проблему путем повышения или с помощью некоторых простых кодов, вместо этого? http://support.microsoft.com/kb/193073

(я пытался задать имя мьютекса как «Global \ mymutex», но мьютекс создать не удалось) (Я также пытался использовать Windows CreateMutex (), но он также страдает от той же проблемы, как упомянуто в kb193073)

Спасибо!

Simon

1 Ответ

1 голос
/ 21 ноября 2012

Если вы говорите, что у администратора нет проблем, возможно, это как-то связано с разрешениями, попробуйте следующее:

void MyFunc()
{
  //Open or create the named mutex
  permissions allow_all;
  allow_all.set_unrestricted();
  named_mutex mutex(open_or_create, "mymutex", allow_all);
  {
     scoped_lock<named_mutex> lock(mutex);
     DoSomeWork();
  }
  named_mutex::remove("mymutex");
}
...