Отслеживание запуска и останова процессов в Ring0

Тема в разделе "WASM.WIN32", создана пользователем prus, 14 ноя 2007.

  1. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Привет Всем!
    Помогите плз немного. Я в драйверах новичок и поэтому такой вопрос:
    Нашел тут примерчик, в котором отслеживается запуск и останов процессов в системе.
    Делается там с помощью PsSetCreateProcessNotifyRoutine(call_back_func, FALSE). Все работает, но вот как теперь передать в пользовательскую прогу необходимые мне данные, полученные в Ring0 как результат работы моей call_back_func?
     
  2. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Статьи Four-F'a посмотри.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    shared memory зааюзать.

    смотри в сторону MmMapLockedPagesSpecifyCache
     
  4. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    nester7
    Спасиб! Я вообще на С делаю, но это тоже читабельно.
    Там рассказывается, насколько я понял, про метод через DeviceIoControl(...код_запроса_к_драйверу...) из пользовательского приложения. Но получается, что ее нужно вызывать в цикле, а хочется, чтоб когда процесс создался или завершился, об этом было оповещено приложение из Ring3. Или я что-то не так понял?
     
  5. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Great
    Спасиб! Ща гляну...
     
  6. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    tylerdurden
    изврат имхо))
     
  8. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Great
    Прально ли я понял: с помощью MmMapLockedPagesSpecifyCache я выделю память для AccessMode = UserMode, запишу туда что-нить, а потом в DispatchControl в pIrp->AssociatedIrp.SystemBuffer нужно поместить указатель на выделенную память?
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    расшарь объект событие. и сигналь из драйвера когда надо. только про синхронизацию не забудь, тк может сразу отрабатыватся несколько NotifyRoutine.
     
  10. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    n0name
    Спасиб!
    А можно где-нить поглядеть примеры на С желательно?
     
  11. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    И еще непонятно, как все же из юзер мода я доступ получу к расшаленной памяти?
     
  12. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
  13. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    nester7
    Угу, спасиб!
    Т.е. мне нужно сначала создать разделяемые событие и буфер, потом получить их указатели в Ring3 и потом писать из драйвера в разделяемую область и сигнализировать об этом приложению... Я прально понял механизм?
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    prus
    дада. пишешь в ядре по ядерному указателю, в ринг3 читашь по юзермодному указателю когда событие сигналится.
    в двух словах - выделяется буффер, желательно nonpaged (через ExAllocatePool). Далее IoAllocateMdl, MmBuildMdlForNonpagedPool, MmMapLockedPagesSpecifyCache. и у тебя есть юзермодная проекция этого буффера.
    подробнее в статье форфа
     
  15. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Great
    Угу. Буду пробовать и разбираться. Напишу, если не получится что-то.
    Спасиб за помощь!
     
  16. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    А скажите: как можно время системное в драйвере получить? Ну что-то типа GetSystemTime в Ring3
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    KeQuerySystemTime()
     
  18. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    n0name
    Спасиб!
    А где в LARGE_INTEGER находится количество секунд? В Low или High? Ну как в time(&_time) чтоб...
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    там хранится число сотен наносекунд. в обоих полях сразу - это 64битное значение.
     
  20. prus

    prus New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2007
    Сообщения:
    92
    Great
    Ясно, спасиб.
    Я с помощью RtlTimeToTimeFields() лучше нормальный вид получу сразу :).