Синхронизация с пользовательским кодом.

Тема в разделе "WASM.NT.KERNEL", создана пользователем Euler, 13 дек 2011.

  1. Euler

    Euler New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    56
    Здравствуйте, я только начал писать драйвера режима ядра, поэтому заранее извиняюсь, если вопрос окажется банальным.
    Задача такая- в SDT подменяется функция, далее нужно перед вызовом оригинала передать управление определённой функции в режим пользователя. При этом важно максимизировать скорость выполнения, т.к. функция из SDT может вызываться очень часто. Более того- этот код может зависать и "делить на ноль", но не может вызывать перехватываемый сервис. Т.е. нужно:
    0) вызвать функцию из режима пользователя и ждать одну секунду её завершения
    0.0) Если функция из пункта 0 успешно завершилась, то обработать возвращаемые ей данные
    0.1) Если функция не завершилась, то обработать эту ситуацию и продолжить выполнение кода
    0.2) Если функция "упала", то обработать и эту ситуацию(иначе чем 0.1) и продолжить выполнение кода
    Вроде как специально под эти цели дана функция KeUserModeCallback, если вернула STATUS_SUCCESS, то всё хорошо, иначе всё плохо. Но как быть с зависанием? Просто запускать в отдельном потоке и ждать через KeWaitForSingleObject или есть способы лучше?