DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS

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

  1. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Можешь так же посмотреть в сторону ZwYieldExecution()
     
  2. Crash

    Crash New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2004
    Сообщения:
    73
    Пробовал без 500 мс. - задержки вызвать эту функцию. BSOD'ы стали реже выскакивать, но все равно они есть. Думаю, ее можно использовать как дополнительное средство задержки перед задержкой в 500 мс.
     
  3. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Crash
    Я тебе об этом говорил ещё выше.

    Не совсем верно. Иногда они возвращаютса=))
     
  4. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    ИМХО не семафоры, а просто глобальная переменная, и в самом начале хука и конце хука:

    __asm lock inc inside_body;
    ....
    __asm lock dec inside_body;

    и перед выгрузкой отхукать и ждать когда inside_body будет 0, проверив потом еще EIP (если тред застрял в до inc или после dec).
     
  5. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Deyton
    вот кстати да, а всегда так хуки персчитывал и всегда работало

    hook_proc:
    cmp dword ptr [shutdown],0
    jne real_proc
    lock inc dword ptr [inhook]
    ...
    call real_proc
    ...
    lock dec dword ptr [inhook]
    ret

    без таких Guard-ов как только не падает, хорошо если с передачей управления в освобожденную память, а если нет? полный П...
     
  6. Igi

    Igi New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2005
    Сообщения:
    35
    Deyton
    А как такое сделать?
     
  7. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
  8. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Может я уже поздновато вклинился, но всеже....
    Имею аналогичную проблему, только мой драйвер перехватывает DRIVER_OBJECT->MajorFunction. Попробовал решить эту проблему следующим способом:
    вместо вызова через call eax использовал
    Код (Text):
    1. leave
    2. jmp eax
    поидее с таким приемом управление передается оригинальной процедуре и при завершении irp мой участок кода уже не участвует. Все бы хорошо, но срабатывает это только один раз почему то.... т.е. загрузил драйвер - выгрузил, загрузил и при выгрузке BSOD PAGE_FAULT_IN_NONPAGED_AREA. Отловить пока не получается. Поэтому хочу спросить у wasm-сообщества решает ли данный метод проблему(хотя бы в теории) обсуждаемую в этом топике (и следовательно bsod из-за кривых ручек) либо есть какие то подводные камни?
     
  9. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    неужели ни кто не пользовался такими приемами?!
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну давай параметры бсода и !analyze -v.
    гадать на кофейной гуще пока не умеем
     
  11. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Я не прошу разобрать мои ошибки. меня интересует правильный ли я использую подход для того чтобы не участвовать в завершении irp и свободно выгружать свой драйвер когда захочу.