Я создаю приложение в Vista, которое включает в себя службу и консольное приложение. Оба работают под одной учетной записью пользователя
В сервисе я создаю событие и жду этого события. В консольном приложении я открываю то же событие (здесь начинается проблема) и вызываю SetEvent функцию. Я не могу открыть событие (получаю ошибку 5, доступ запрещен) в консольном приложении. Я искал в сети и увидел кое-что об уровне целостности (я не уверен, что проблема связана с уровнем целостности). Он говорит, что служба и приложение получило разные уровни целостности.
вот часть кода, где происходит IPC
сервис
DWORD
WINAPI IpcThread(LPVOID lpParam)
{
HANDLE ghRequestEvent = NULL ;
ghRequestEvent = CreateEvent(NULL, FALSE,
FALSE, "Global\\Event1") ; //creating the event
if(NULL == ghRequestEvent)
{
//error
}
while(1)
{
WaitForSingleObject(ghRequestEvent, INFINITE) //waiting for the event
//here some action related to event
}
}
Консольное приложение
Здесь, в приложении, открытие события и установка события
unsigned int
event_notification()
{
HANDLE ghRequestEvent = NULL ;
ghRequestEvent = OpenEvent(SYNCHRONIZE|EVENT_MODIFY_STATE, FALSE, "Global\\Event1") ;
if(NULL == ghRequestEvent)
{
//error
}
SetEvent(ghRequestEvent) ;
}
Я запускаю оба приложения (serivce и консольное приложение) с правами администратора (я вошел в систему как Администратор или запускаю консольное приложение, щелкнув правой кнопкой мыши и используя опцию «Запуск от имени администратора»).
Ошибка, которую я получаю в консольном приложении (где я открываю событие), это ошибка № 5 (доступ запрещен).
Так что будет очень полезно, если вы расскажете, как выполнить IPC между службой и приложением в Vista
Заранее спасибо
Navaneeth