[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