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

Octavian Voicu octavian.voicu at gmail.com
Thu Apr 29 17:00:56 EEST 2010


On Thu, Apr 29, 2010 at 9:30 AM, Alexandru Juncu
<alexandrujuncu at gmail.com> wrote:
> VOID myDpcRoutine(KDPC* dpc, PVOID context, PVOID arg1, PVOID arg2)
> {
>
>        my_device_data *my_dev = (my_device_data*) context;
>        DbgPrint("DPC Routine\n");
>        KeSetEvent(&my_dev->event, IO_NO_INCREMENT, TRUE);
> }
...
> NTSTATUS DriverEntry()
> {
>    ....
>    KeInitializeEvent(&com1_data->event, NotificationEvent , FALSE);
>    KeInitializeDpc(&com1_data->dpc, myDpcRoutine, &com1_data);
> }

Pentru ca scrii com1_data->event si com1_data->dpc, inseamna ca
variabila com1_data este deja un pointer deci probabil de tipul
my_device_data*. Tu transmiti in apelul KeInitializeDpc contextul
&com1_data -- deci adresa pointerului -- care este de tipul
my_device_data**. Apoi in myDpcRoutine iei contextul si faci cast la
my_device_data* si il folosesti asa => BSOD. Nici macar nu ajungea sa
apeleze KeSetEvent si sa-ti dea BSOD-ul cauzat de parametrul TRUE.

Octavian


More information about the pso mailing list