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.