Как передать и обработать хэндл ивента из юзер мода в ядро знаю все, а вот как сделать обратное??? Т.е. я создаю объект событие в ядре и хочу чтобы пользовательское приложение получило к нему доступ. Возможно ли такое?
А у меня с этим тоже проблемы возникли, создаю событие в ядре, открываю в юзере, но сделать его сигнальным не могу, флаги вроде все правильно установил. Приведу код, посмотрите, может я, из-за своей врожденной невнимательности, чего-нить накосячил. Ядро Код (Text): InitializeObjectAttributes(&EventOa, &ustrEventName, OBJ_CASE_INSENSITIVE , NULL, NULL); EvntStatus = ZwCreateEvent ( &hEvent, EVENT_ALL_ACCESS, &EventOa, SnchronizationEvent, FALSE ); юзер Код (Text): hEvent = ::OpenEvent ( SYNCHRONIZE | EVENT_MODIFY_STATE, FALSE, "Event" ); Получаю ошибку с номером 5 - отказ в доступе
ProfessorNimnull не знаю как насчет модификации, но создание евента в ядре, а ожидание его в юзермоде у меня было без проблем. насчет установки его в юзермоде - фиг знает.. попробуй SYNCHRONIZE убрать
Four-F Почитал я эту статейку, но ответа так и не нашел. Там вообще говорится, что так лучше не делать.
Точно не знаю, но думаю, если заюзать ZwCreateEvent в контексте пользовательского процесса, то у него не должно возникнуть проблемм. CreateEvent именно так и работает: kernel32!CreateEvent-> ntdll!NtCreateEvent->ntoskrnl!NtCreateEvent. ZwCreateEvent, кажется, экспортируется. Глянь в исходниках, как там это всё происходит. А вообще непонятно зачем это нужно.
ProfessorNimnull Попробую лучше нормальные функции создания event'a IoCreateNotificationEvent например.
Дело в том, что в моей ситуации может создаться несколько иментов одновременно, и следовательно надо их как-то различать. Конечно можно каждому генерить уникальное имя, но я думал что передавать хендл в юзермод будет правильней
Господа, а может кто-нибудь выложить статью из журнала "The NT Insider" за 2002 год, "Sharing is Caring - Sharing Events Between Kernel and User Mode", очень надо. Заранее благодарен.