+136.7        
        
                        - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 
                        BOOLEAN
KiCheckForAtlThunk (
    IN PEXCEPTION_RECORD ExceptionRecord,
    IN PCONTEXT Context
    )
/*++
Routine Description:
    This routine will determine whether an access violation was raised due to
    an attempt to execute an ATL thunk in a no-execute, non-stack area.
    If so, the thunk will be emulated and execution resumed.
Arguments:
    ExceptionRecord - Supplies a pointer to an exception record.
    Context - Supplies a pointer to a context frame.
Return Value:
    TRUE - Context was updated to reflect the emulated ATL thunk, resume
           execution.
    FALSE - Not an ATL thunk, continue raising the exception.
--*/
//.........
//KiDispatchException:
//......
 switch (ExceptionRecord->ExceptionCode) {
        case STATUS_BREAKPOINT:
            ContextFrame.Eip--;
            break;
        case KI_EXCEPTION_ACCESS_VIOLATION:
            ExceptionRecord->ExceptionCode = STATUS_ACCESS_VIOLATION;
            if (PreviousMode == UserMode) {
                if (KiCheckForAtlThunk(ExceptionRecord,&ContextFrame) != FALSE) {
                    goto Handled1;
                }
//................
                                 
        
            Объявление KiCheckForAtlThunk (втыкать в комменты и название =)) ) Для тех кто в танке: исходники Windows, оконные классы ATL выделяют тупо в хипе кусок-переходник, который заменяет HWND, идущий первым параметром в оконную процедуру, на естественный, объектно-ориентированный this. Так вот, если у нас установлено где-то в реестре юзать защиту от выполнения данных, то, естественно,  в хипе хер чего выполнишь, и возникнет #GP, и тут-то нам и придет на помощь KiCheckForAtlThunk =) Короче, ИМХО, вносить изменения в ядро, для того, чтобы нормально работала криво написанная юзермодная библиотека -- та еще жесть =) Все кто минусует -- не шарят :P
        
        
            Запостил: 
 ISith,
            30 Января 2010
        
        
            
            
        
        
    
 
Есть другие идеи как это починить, без перекомпиляции существующих программ?