DPC: DISPATCH_LEVEL -> PASSIVE_LEVEL ?

Тема в разделе "WASM.NT.KERNEL", создана пользователем 0x56, 17 янв 2008.

  1. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    Можно понизить IRQL в DPC, которая вызывается по таймеру?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а зачем?
     
  3. 0x56

    0x56 New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2008
    Сообщения:
    63
    Great
    ну по сути просто нужно вызвать функцию по таймеру
    и она работает с нативными функциями
     
  4. TarasCo

    TarasCo New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    106
    Понизить нельзя, можно поставить в очередь рабочий поток - ExQueueWorkItem/IoQueueWorkItem. Конечно, немного тупо получается :). Другой подход - создать свой поток и ждать таймер на KeWaitForSingleObject.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Понизить физически можно, но это нарушение логики разработки кернел кода и приведет к десинхронизации, которая, вполне вероятно, закончится BSoD'ом.
    Поэтому нужно ждать самому, пока IRQL не будет понижен до требуемого уровня. Например, как опять же уже сказали, ExQueueWorkItem.
    А таймер опять же как уже сказали можно создать проще... Вообще, не стоит применять DPC в данном случае без острой необходимости.