Предача ивента из KernelMode в UserMode

Тема в разделе "WASM.NT.KERNEL", создана пользователем DeeoniS, 7 май 2007.

  1. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    Как передать и обработать хэндл ивента из юзер мода в ядро знаю все, а вот как сделать обратное??? Т.е. я создаю объект событие в ядре и хочу чтобы пользовательское приложение получило к нему доступ. Возможно ли такое?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    DeeoniS
    Конечно, просто OpenEvent/CreateEvent. Не обязательно передавать хендл.
     
  3. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    n0name
    это если по имени, а если ивент безымянный???
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    да, создай его в \BaseNamedObjects
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    См. на osronline.com "Sharing Events Between Kernel and User Mode" (нужна регистрация)
     
  6. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    А у меня с этим тоже проблемы возникли, создаю событие в ядре, открываю в юзере, но сделать его сигнальным не могу, флаги вроде все правильно установил. Приведу код, посмотрите, может я, из-за своей врожденной невнимательности, чего-нить накосячил.

    Ядро
    Код (Text):
    1. InitializeObjectAttributes(&EventOa, &ustrEventName, OBJ_CASE_INSENSITIVE , NULL, NULL);
    2.            
    3.  
    4. EvntStatus = ZwCreateEvent ( &hEvent, EVENT_ALL_ACCESS, &EventOa, SnchronizationEvent, FALSE );
    юзер

    Код (Text):
    1. hEvent = ::OpenEvent ( SYNCHRONIZE | EVENT_MODIFY_STATE,    FALSE, "Event" );
    Получаю ошибку с номером 5 - отказ в доступе
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ProfessorNimnull
    не знаю как насчет модификации, но создание евента в ядре, а ожидание его в юзермоде у меня было без проблем.
    насчет установки его в юзермоде - фиг знает.. попробуй SYNCHRONIZE убрать
     
  8. rav

    rav New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    159
    Адрес:
    Москва
    Поставь соответствующие права доступа к событию при создании. Или убери EVENT_MODIFY_STATE.
     
  9. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    Four-F
    Почитал я эту статейку, но ответа так и не нашел. Там вообще говорится, что так лучше не делать.
     
  10. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Точно не знаю, но думаю, если заюзать ZwCreateEvent в контексте пользовательского процесса, то у него не должно возникнуть проблемм. CreateEvent именно так и работает: kernel32!CreateEvent-> ntdll!NtCreateEvent->ntoskrnl!NtCreateEvent. ZwCreateEvent, кажется, экспортируется. Глянь в исходниках, как там это всё происходит.

    А вообще непонятно зачем это нужно.
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ProfessorNimnull
    Попробую лучше нормальные функции создания event'a ;)
    IoCreateNotificationEvent например.
     
  12. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    ProfessorNimnull
    Можкт быть надо в InitializeObjectAttributes передатать дескриптор с нулевым DACL ?
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ну а если евент безымянный?
     
  14. DeeoniS

    DeeoniS New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2004
    Сообщения:
    132
    Дело в том, что в моей ситуации может создаться несколько иментов одновременно, и следовательно надо их как-то различать. Конечно можно каждому генерить уникальное имя, но я думал что передавать хендл в юзермод будет правильней
     
  15. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    ZwDuplicateObject не поможет?
     
  16. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    Господа, а может кто-нибудь выложить статью из журнала "The NT Insider" за 2002 год, "Sharing is Caring - Sharing Events Between Kernel and User Mode", очень надо. Заранее благодарен.
     
  17. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
     
  18. ProfessorNimnull

    ProfessorNimnull New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    26
    Four-F, спасибо тебе большое.