Всем доброго! Очередные вопросы, все никак не могу до конца разобраться с отложенными IRP. Проблема в следующем, в потоке обрабатываю отложенные IRP, заметил одну особенность, если флаг синхрогизации не выставлен, то обработка проходет удачно, если же он стоит, после вызова IoCallDriver наступает тишина, т.е. нижестоящий драйвер не возвращает мне управление, что этоможет быть и как с этим бороться? Я попытался использовать KeAttachProcess (IoGetRequestorProcess(irp)), но врезультате получил такой же BSOD Что-то я все-таки доконца не понял о работе с отложенными пакетами, пожалуйста просветите.
Что значит "в потоке обрабатываю отложенные IRP"? Кто их "откладывает"? Ты? Что такое "флаг синхрогизации"? IRP_SYNCHRONOUS_API? При чём тут вообще KeAttachProcess? Лучше сразу показать кусок кода.
Откладываю конечно же я, выполняю это по причине решение проблемы нехватки ресурсов, т.е. если мне не удается получуть нужное количество нестраничной памяти, то отправляю текущий пакет в очередь со статусом пендинг, ну и в отдельной нити пытаюсь таки заполучить долгожданный участок памяти под мою переменную, конечно же это утопия, но ничего другого на ум не пришло. я имел ввиду этот FO_SYNCHRONOUS_IO флаг. Ну.... сложно сказать, я же вообще то пытался его применить как эксперементальный вариант, а вообще бытует мнение, что при работе с пользовательским буфером, желательно предварительно поключиться к процессу, которому принадлежит этот буфер, дабы избежать дэдлоков и прочих проблем, но если честно, то в процессе работы над своим проектом, ниразу не использовал этот прием, и проблем особых тоже не наблюдал, просто когда находишься в отчаяние, хватаешься за любую соломенку .
Мнение о "предварительном поключении к процессу" в корне ошибочно. Драйвер, который принимает пользовательский буфер, должен его лочить и мапить в ядро, если это мужно. А KeAttachProcess вообще недокументированная функция. Касательно первоначального вопроса - не видя кода что-то сказать трудно.