Синхронные и асинхронные IRP и их обработка?

Тема в разделе "WASM.NT.KERNEL", создана пользователем LuckyDevil, 30 июн 2006.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    Очередные вопросы, все никак не могу до конца разобраться с отложенными IRP.

    Проблема в следующем, в потоке обрабатываю отложенные IRP, заметил одну особенность, если флаг синхрогизации не выставлен, то обработка проходет удачно, если же он стоит, после вызова IoCallDriver наступает тишина, т.е. нижестоящий драйвер не возвращает мне управление, что этоможет быть и как с этим бороться?

    Я попытался использовать KeAttachProcess (IoGetRequestorProcess(irp)), но врезультате получил такой же BSOD



    Что-то я все-таки доконца не понял о работе с отложенными пакетами, пожалуйста просветите.
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Что значит "в потоке обрабатываю отложенные IRP"? Кто их "откладывает"? Ты? Что такое "флаг синхрогизации"? IRP_SYNCHRONOUS_API? При чём тут вообще KeAttachProcess?



    Лучше сразу показать кусок кода.
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Откладываю конечно же я, выполняю это по причине решение проблемы нехватки ресурсов, т.е. если мне не удается получуть нужное количество нестраничной памяти, то отправляю текущий пакет в очередь со статусом пендинг, ну и в отдельной нити пытаюсь таки заполучить долгожданный участок памяти под мою переменную, конечно же это утопия, но ничего другого на ум не пришло.
    я имел ввиду этот FO_SYNCHRONOUS_IO флаг.
    Ну.... :) сложно сказать, я же вообще то пытался его применить как эксперементальный вариант, а вообще бытует мнение, что при работе с пользовательским буфером, желательно предварительно поключиться к процессу, которому принадлежит этот буфер, дабы избежать дэдлоков и прочих проблем, но если честно, то в процессе работы над своим проектом, ниразу не использовал этот прием, и проблем особых тоже не наблюдал, просто когда находишься в отчаяние, хватаешься за любую соломенку :).
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Мнение о "предварительном поключении к процессу" в корне ошибочно. Драйвер, который принимает пользовательский буфер, должен его лочить и мапить в ядро, если это мужно. А KeAttachProcess вообще недокументированная функция. Касательно первоначального вопроса - не видя кода что-то сказать трудно.