[pso] [tema2][windows] KeSetEvent IRQL_NOT_LESS_OR_EQUAL

Octavian Voicu octavian.voicu at gmail.com
Thu Apr 23 19:22:45 EEST 2009


Eu ma gandesc ca de fapt nu i-ai pasat un pointer catre flag, ci chiar
flag-ul.  Adica ai facut ceva de genul:
int flag = READ;
KeInsertQueueDpc(&dpc, (PVOID) flag, (PVOID) 0);

In cazul asta, in DPC trebuie sa faci:

int flag = (int) arg1;

Chiar daca e declarat ca PVOID (adica void*) argumentul, tu ii dai o valoare
intreaga deci tot asa trebuie accesat.
Daca ai pasat &flag in KeInsertQueueDpc, atunci e problema pe care a
observat-o Eduard si ar trebui sa pasezi direct flagul.


On Thu, Apr 23, 2009 at 6:33 PM, Orasanu Eduard <edi_o2001 at yahoo.com> wrote:

>
>
> Cand faci "int flag=*((int*)arg1);" sigur ce dereferentiezi mai e in
> memorie - cand inserezi DPC-ul in coada nu cumva dai adresa la o variabila
> de pe stiva functiei/handlerului de intrerupere care "curatata" dupa
> terminarea apelului?
>
> Edi
>
> --- On Thu, 4/23/09, alexandra gherghina <alexa.gherghina at gmail.com>
> wrote:
>
> > From: alexandra gherghina <alexa.gherghina at gmail.com>
> > Subject: Re: [pso] [tema2][windows] KeSetEvent IRQL_NOT_LESS_OR_EQUAL
> > To: "Proiectarea Sistemelor de Operare" <pso at cursuri.cs.pub.ro>
> > Date: Thursday, April 23, 2009, 8:01 AM
> > Salut,
> >
> > Am incercat si varianta cu ExAllocatePool si tot asa da.
> > In functia de DPC fac doar:
> >
> >     struct dev_info * di=(struct dev_info*)ctx;
> >
> >     int flag=*((int*)arg1);
> >
> >     switch (flag){
> >
> >         case READ:
> >
> >             KeSetEvent(&(di->read_event),
> > IO_NO_INCREMENT, FALSE);
> >
> >             break;
> >         case WRITE:
> >
> >             KeSetEvent(&(di->write_event),
> > IO_NO_INCREMENT, FALSE);
> >
> >             break;
> >     }
> >
> > E posibil ca eroarea sa vina din alta parte, desi kd-ul
> > zice ca e de la KeSetEvent?
> >
> > Alexandra
> >
> > 2009/4/23 Bercea Gabriel <gamitech at gmail.com>
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Buna Alexandra,
> >
> > Ca
> > sa poti da set event trebuie mai intai sa il initializezi
> > din
> > nonpaged pool.
> >
> > Poti face asta in 2 moduri
> >
> > 1)
> > PKEVENT
> > myEvent = Exallocatepool -> nonpagedpool sizeof(KEVENT);
> > KeInitializeEvent()
> >
> > 2)
> > KeInitializeEvent(&myEvent) la un event declarat
> > intr-o
> > functie sau global de tipul KEVENT.
> >
> > Ruleaza-ti driverul cu verifierul pornit.
> >
> >
> >
> >
> >
> > Cu
> > respect,
> >
> > Bercea Gabriel 342 C2
> >
> > Mobile contact:  (+40)0740049634
> >
> > eMail: gamitech at gmail.com
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > From: pso-bounces at cursuri.cs.pub.ro
> > [mailto:pso-bounces at cursuri.cs.pub.ro]
> > On Behalf Of alexandra gherghina
> >
> > Sent: Wednesday, April 22, 2009 11:36 PM
> >
> > To: Proiectarea Sistemelor de Operare
> >
> > Subject: [pso] [tema2][windows] KeSetEvent
> > IRQL_NOT_LESS_OR_EQUAL
> >
> >
> >
> >
> >
> > Salut!
> >
> >
> >
> > Am urmat schema:
> >
> >
> >
> > - wait pe un cate event in rutina de write, respectiv read
> >
> > - planificat cate un dpc in handlerul de intrerupere ce
> > face KeSetEvent
> >
> >
> >
> > Problema este ca la acel KeSetEvent imi da blue screen. Any
> > ideas de la ce
> > vine?
> >
> >
> >
> > Multumesc!
> >
> > Alexandra
> >
> >
> >
> > kd> !analyze -v
> >
> >
> *******************************************************************************
> >
> >
> *
> > *
> >
> > *
> > Bugcheck
> > Analysis
> > *
> >
> >
> *
> > *
> >
> >
> *******************************************************************************
> >
> >
> >
> > IRQL_NOT_LESS_OR_EQUAL (a)
> >
> > An attempt was made to access a pageable (or completely
> > invalid) address at an
> >
> > interrupt request level (IRQL) that is too high.  This is
> > usually
> >
> > caused by drivers using improper addresses.
> >
> > If a kernel debugger is available get the stack backtrace.
> >
> > Arguments:
> >
> > Arg1: fa037098, memory referenced
> >
> > Arg2: 00000002, IRQL
> >
> > Arg3: 00000000, bitfield :
> >
> >     bit 0 : value 0 = read operation, 1 = write
> > operation
> >
> >     bit 3 : value 0 = not an execute operation, 1 =
> > execute
> > operation (only on chips which support this level of
> > status)
> >
> > Arg4: 808269e6, address which referenced memory
> >
> >
> >
> > Debugging Details:
> >
> > ------------------
> >
> >
> >
> >
> >
> > READ_ADDRESS:  fa037098
> >
> >
> >
> > CURRENT_IRQL:  2
> >
> >
> >
> > FAULTING_IP:
> >
> > nt!KeSetEvent+e
> >
> > 808269e6 803e00
> > cmp     byte ptr [esi],0
> >
> >
> >
> > DEFAULT_BUCKET_ID:  DRIVER_FAULT
> >
> >
> >
> > BUGCHECK_STR:  0xA
> >
> >
> >
> > PROCESS_NAME:  Idle
> >
> >
> >
> > TRAP_FRAME:  80894510 -- (.trap 0xffffffff80894510)
> >
> > ErrCode = 00000000
> >
> > eax=00000001 ebx=00000001 ecx=fa037098 edx=00000009
> > esi=fa037098 edi=ffdffa40
> >
> > eip=808269e6 esp=80894584 ebp=80894590
> > iopl=0         nv up ei pl nz na po nc
> >
> > cs=0008  ss=0010  ds=0023  es=0023  fs=0030
> > gs=0000
> > efl=00010202
> >
> > nt!KeSetEvent+0xe:
> >
> > 808269e6 803e00
> > cmp     byte ptr
> > [esi],0
> > ds:0023:fa037098=??
> >
> > Resetting default scope
> >
> >
> >
> > LAST_CONTROL_TRANSFER:  from 808269e6 to 80886099
> >
> >
> >
> > STACK_TEXT:
> >
> > 80894510 808269e6 badb0d00 00000009 00000000
> > nt!KiTrap0E+0x2a1
> >
> > 80894590 f9fa805b fa037098 00000000 00000000
> > nt!KeSetEvent+0xe
> >
> > WARNING: Stack unwind information not available. Following
> > frames may be wrong.
> >
> > 808945b0 8082f582 816479cc fa036c6c 81647e38
> > uart16550+0x105b
> >
> > 80894600 808873c7 00000000 0000000e 00000000
> > nt!KiRetireDpcList+0xca
> >
> > 80894604 00000000 0000000e 00000000 00000000
> > nt!KiIdleLoop+0x2f
> >
> >
> >
> >
> >
> > STACK_COMMAND:  kb
> >
> >
> >
> > FOLLOWUP_IP:
> >
> > uart16550+105b
> >
> > f9fa805b eb0d
> > jmp     uart16550+0x106a (f9fa806a)
> >
> >
> >
> > SYMBOL_STACK_INDEX:  2
> >
> >
> >
> > SYMBOL_NAME:  uart16550+105b
> >
> >
> >
> > FOLLOWUP_NAME:  MachineOwner
> >
> >
> >
> > MODULE_NAME: uart16550
> >
> >
> >
> > IMAGE_NAME:  uart16550.sys
> >
> >
> >
> > DEBUG_FLR_IMAGE_TIMESTAMP:  49ef7a54
> >
> >
> >
> > FAILURE_BUCKET_ID:  0xA_uart16550+105b
> >
> >
> >
> > BUCKET_ID:  0xA_uart16550+105b
> >
> >
> >
> > Followup: MachineOwner
> >
> > ---------
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> >
> > pso mailing list
> >
> > pso at cursuri.cs.pub.ro
> >
> > http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
> >
> >
> >
> >
> >
> > -----Inline Attachment Follows-----
> >
> > _______________________________________________
> > pso mailing list
> > pso at cursuri.cs.pub.ro
> > http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
> >
>
>
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>



-- 
Octavian Voicu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090423/46b86d8d/attachment-0001.htm>


More information about the pso mailing list