Ver Mensaje Individual
  #1  
Antiguo 03-04-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Problemas con un condicional

Hola amigos, pues mi problema es que no consigo hacer que este condicional haga lo que yo quiero:

Código:
if((DebugEv.u.Exception.ExceptionRecord.ExceptionInformation[0] == 0 && Dbg->MemoryBP.Type == ON_ACCESS) ||
   (DebugEv.u.Exception.ExceptionRecord.ExceptionInformation[0] == 0 && Dbg->MemoryBP.Type == ON_EXECUTION) ||
   (DebugEv.u.Exception.ExceptionRecord.ExceptionInformation[0] == 1 && Dbg->MemoryBP.Type == ON_WRITE))
{
         Synchronize(OnMemoryBPEventThread);
}
Lo explico un poco:
La variable DebugEv.u.Exception.ExceptionRecord.ExceptionInformation[0] da 0 si la excepcion es por ejecucion o por lectura y da 1 si es por escritura.
ON_ACCESS, ON_EXECUTION y ON_WRITE son tres constantes que defino asi:

#define ON_ACCESS PAGE_NOACCESS
#define ON_WRITE PAGE_EXECUTE_READ | PAGE_GUARD
#define ON_EXECUTION PAGE_READWRITE | PAGE_GUARD

La idea es que solo entre en uno de estos 3 casos:
1ª linea -> si ExceptionInformation[0] == 0 y el tipo es ON_ACCESS
2ª linea -> si ExceptionInformation[0] == 0 y el tipo es ON_EXECUTION
3ª linea -> si ExceptionInformation[0] == 1 y el tipo es ON_WRITE

El problema es que entra siempre aunque no se cumplan ninguna de las 3 condiciones, o sea, si el tipo es ON_WRITE y ExceptionInformation[0] == 0 entra y no debería. ¿que hago mal en el condicional? Estoy loco dandole vueltas y no veo el fallo.
Gracias de antemano.
Responder Con Cita