[pso] [tema2][windows] DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)

Octavian Voicu octavian.voicu at gmail.com
Sun Apr 25 01:27:22 EEST 2010


On Sun, Apr 25, 2010 at 1:00 AM, Andrei Dragus <adragus at gmail.com> wrote:
> WARNING: Frame IP not in any known module. Following frames may be wrong.
> f78e6b90 80887734 82235d98 81e720e0 00000033 <Unloaded_uart16550.sys>+0x1680
> f78e6bb4 808876e8 82419a00 00000033 f78e6c88 nt!KiChainedDispatch2ndLvl+0x3c
> f78e6bb4 80a54305 82419a00 00000033 f78e6c88 nt!KiChainedDispatch+0x28
> f78e6c34 f7848c80 000002f9 00000003 8088d069 hal!WRITE_PORT_UCHAR+0x9
> f78e6c88 808eed5d 823cf030 81ed3000 00000000 uart16550!DriverEntry+0x1b0
> [c:\cygwin\home\administrator\tema2\uart16550.c @ 617]
>
>
> Din cate inteleg eu de aici instructiunea care genereaza BSOD este exatct
> WRITE_PORT_UCHAR, nu ajunge la intrerupere.

Backtrace-ul arata ca respectivul cod e chiar in DriverEntry.
Consultand WRK, prezenta KiChainedDispatch [1] in stack trace ma face
sa cred ca inainte ca WRITE_PORT_UCHAR sa se intoarca este generata o
intrerupere THREI. Probabil ca n-ai initializat complet structurile
interne si ramura THREI a handlerului de intrerupere genereaza
BSOD-ul.

Activarea intreruperilor trebuie sa fie ultimul pas din initializare,
pentru ca odata activate pot veni oricand (in cazul THREI vine
instantaneu pentru ca registrul de transmit al portului serial e gol).
Oricum, dupa cum am mai zis in alt thread [2], nu are sens sa activezi
THREI in initializarea modului pentru ca n-ai nimic de trimis inca
(dar n-ar duce la BSOD daca ar fi facuta dupa ce totul e initializat
corect; pe de alta parte, daca o activezi aici si nu o dezactivezi in
handlerul de intrerupere cand vezi ca n-ai nimic de trimis, vei avea
parte de un freeze complet al sistemului).

Octavian

[1] http://koala.cs.pub.ro/lxr/wrk/ntos/ke/amd64/intsup.asm#L180
[2] http://cursuri.cs.pub.ro/lurker/message/20100413.182445.7a3bf274.en.html


More information about the pso mailing list