2012-01-25 4 views
2

Случается в Windows 7:Может ли один процесс сигнализировать событие, созданное другим процессом под другим именем пользователя (оба процесса работают под другим именем пользователя)?

Я установил процесс proc1.exe в сервисомах proc1, я создаю новый процесс proc2.exe путь создания идентификатора сеанса и маркера и переходя к CreateProcessAsUser().

В Proc2 я создаю одно событие, которое ждет сигнала. В Proc1 я посылаю сигнал этому событию OpenEvent и SetEvent, когда я прекращаю обслуживание.

Если я запускаю службу, proc1.exe работает под именем пользователя SYSTEM и proc2.exe работает под именем loggedin username (Taskmanager).

Когда я прекращаю обслуживание, Proc1 пытается отправить сигнал, вызвав OpenEvent. Но OpenEvent возвращает NULL.

Оба процесса работают под другим пользователем. проблема в доступе к этому событию? если да, то как сигнализировать событие под другим процессом и пользователем? PLease помогите мне узнать .....

ответ

2

Возможно, ваше мероприятие является локальным для сеанса, где он создан, т.е. если Proc2 создал событие с именем «ShutdownSystem», то это событие известно только для других процессов в пределах этого сессии, подобно локальным переменным в функции.

Если вы хотите, чтобы объект вашего события существовал глобальным образом и был доступен из других сеансов, вы должны префикс его «Глобальный» (например, имя «Global \ ShutdownSystem»). Затем система создаст его в глобальном пространстве имен.

+0

Правильно, я забыл об атрибутах безопасности. Кроме того, не забудьте избежать обратного слэша («\\»). Когда вы открываете событие из proc1 (службы), укажите EVENT_MODIFY_STATE в качестве первого параметра для OpenEvent(). –

+0

Спасибо вам за ответ. Я создаю такое событие, HANDLE lStopHandle = CreateEvent (NULL, FALSE, FALSE, mousestopevent); здесь мне нужно изменить следующим образом: HANDLE lStopHandle = CreateEvent (& sa_in, FALSE, FALSE, «Global \ mousestopevent»); ? – Raj

+0

Большое спасибо ... ОК. Я использую EVENT_ALL_ACCESS в качестве первого параметра в OpenEvent() .. это нормально? и в OpenEvent также я использую имя «Global \\ name» как имя? – Raj

Смежные вопросы