OpenEvent в службе Windows 7
От: kovbas  
Дата: 03.05.11 13:42
Оценка:
Добрый день!

Есть служба, выполняющая следующий код:
void InformWatchdog(char* s)
{
    HANDLE alive; //  inform watchdog about my state
    alive=OpenEvent(EVENT_MODIFY_STATE,FALSE,s);
    SetEvent(alive);
    CloseHandle(alive);
}

И есть программа-сторож, который делает
ResetEvent()

Если и сторож и служба запущены как службы, то все в порядке
Если и сторож и "служба" запущены как приложения, то все в порядке
Если сторож запущен как приложение, то в Windows 7 и 2008 Server служба не может сделать OpenEvent (GetLastError()=ERROR_FILE_NOT_FOUND)
В Win2000,2003,XP все работает нормально
Не подскажете:
— почему так ?
— как бороться ?
Заранее благодарен
Re: OpenEvent в службе Windows 7
От: De-Bugger  
Дата: 03.05.11 13:51
Оценка:
Здравствуйте, kovbas, Вы писали:

K>Не подскажете:

K>- почему так ?
K>- как бороться ?
K>Заранее благодарен

У CreateEvent первым параметром что?
Re: OpenEvent в службе Windows 7
От: okman Беларусь https://searchinform.ru/
Дата: 03.05.11 13:55
Оценка: 1 (1) +2
Здравствуйте, kovbas, Вы писали:

K>Добрый день!


K>Есть служба, выполняющая следующий код:

K>
K>void InformWatchdog(char* s)
K>{
K>    HANDLE alive; //  inform watchdog about my state
K>    alive=OpenEvent(EVENT_MODIFY_STATE,FALSE,s);
K>    SetEvent(alive);
K>    CloseHandle(alive);
K>}
K>

K>И есть программа-сторож, который делает
K>
K>ResetEvent()
K>

K>Если и сторож и служба запущены как службы, то все в порядке
K>Если и сторож и "служба" запущены как приложения, то все в порядке
K>Если сторож запущен как приложение, то в Windows 7 и 2008 Server служба не может сделать OpenEvent (GetLastError()=ERROR_FILE_NOT_FOUND)
K>В Win2000,2003,XP все работает нормально
K>Не подскажете:
K>- почему так ?
K>- как бороться ?
K>Заранее благодарен

Потому что служба и приложение в Windows запускаются с разными учетными записями.
Соответственно, объекты, которые ими создаются, имеют разных владельцев и разные
права доступа. Кроме того, начиная с Windows Vista, службы запускаются в нулевой сессии, а
обычные пользовательские приложения — в других, и далеко не все объекты можно
передавать между этими сессиями. Например, имена глобальных объектов для этого должны,
как минимум, префиксироваться токеном "Global\".

Ищите информацию о безопасности объектов в Win32.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.