Сейчас на форуме: bartolomeo, hgdagon (+7 невидимых)

 eXeL@B —› Программирование —› NO_MORE_IRP_STACK_LOCATIONS
Посл.ответ Сообщение


Ранг: 116.9 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 18 марта 2006 19:44
· Личное сообщение · #1

Вобщем взял DVD диск, и когда компьютер пытается к нему обратиться, например открыть в проводнике, или обратиться из Windows Media Player, возникает BSOD-NO_MORE_IRP_STACK_LOCATIONS который говорит о том что:


Драйвер высшего уровня пытался вызвать драйвер низшего уровня через IoCallDriver() интерфейс, но в запасе не было свободного места в области стека, поэтому драйвер низшего уровня не сможет достичь нужных параметров, так как для него вообще нет никаких параметров.
Это гибельная ситуация, так как драйвер высшего уровня считает, что заполнил параметры для драйвера низшего уровня (что-то он должен был сделать, чтобы вызвать драйвер низшего уровня). В то время как составитель аннулировал конец пакета, т.к. нет свободного места. Это означает, что, скорее всего, какая-то память была повреждена.


NTSTATUS
IoCallDriver(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp
);



я подумал, что отследить из-за какого драйвера вызван BSOD можно, если перехватить IoCallDriver...

вопрос: вообще реально ли это, нет ли способа это узнать попроще? и если действительно писать перехватчик, может ли он быть в user mode или ему обязателен kernel mode?

З.Ы.: пробовал обратиться из Safe Mode- всё работает...

-----
Nothing just happens. You choose it to happen.




Ранг: 186.8 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 19 марта 2006 12:04
· Личное сообщение · #2

Конечно есть способ. Сохрани дамп памяти ядра, засунь его в windbg и изучай.


 eXeL@B —› Программирование —› NO_MORE_IRP_STACK_LOCATIONS
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати