- 
        
Список говнокодов пользователя ISith
        Всего: 4
     
        - 
        
        
                +73.5        
        
                            - 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
 
                        //...                            
                                       }
                                    }
                                  }
                                  if(found) break;
                                }
                              }
                              aStr=wcstok(NULL,m_cmdSEP);
                            }
                          }
                        }
                      }
                    }
                  }
                  else NoDeviceErrorActive(1);
                }
              }
            }
            else NoDeviceErrorActive(1);
          }
        }
      }
    }
  }
//...
                                     
        
            Кусочек функции, сегодня наткнулся, сама функция занимает 540 строк, все методы класса -- 8000 =). И форматирование оригинальное -- не табами, а двумя пробелами =) . Мне нужно было просто посмотреть, как этот класс одну штуку делает, и я теперь сижу счастливый и думаю, как хорошо, что не мне этот код поддерживать =)
        
        
            
 ISith,
            03 Марта 2010
        
        
        
             - 
        
        
                +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
        
        
        
             - 
        
        
                +70.8        
        
                            - 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
 
                        lseek( h, headerSize+0x500, SEEK_SET );
	if( _read( h, &buf, sizeof buf ) != sizeof buf )
		goto __read_error;
	for( int i = 0; i < NUM_EL(sig); ++i ) {
		if( *(long*)&buf[sig->offs] != *(long*)sig->str ) {
__wrong_format:
			message( .... );
			_close( h );
			return FALSE;
		}
	}
	if( *(long*)&buf[0x2C] != *(long*)"_TAG" ) {
		message( .... );
		_close( h );
		return FALSE;
	}
	if( *(long*)&buf[0x32] != *(long*)"_VER" )
		goto __wrong_format;
	*platform = *(ushort*)&buf[0x30];
	if( ver ) {
		long verOffs = headerSize + ((ulong)(*(ushort*)&buf[0x38]) << 4) + *(ushort*)&buf[0x36];
		lseek( h, verOffs, SEEK_SET );
		if( _read( h, ver, sizeof(float) ) != sizeof(float) )
			goto __read_error;
	}
	_close( h );
                                     
        
            Нужно было посмотреть, как делается одна вещь, залез в исходники некоторого старого __С++__(!!!!!!!!!!!!!!)(так что не надо "где здесь с++"=) ) проекта, там классы и все, как положено =)
Причем писал не школьник, а взрослый дядька, у которого опыта больше, чем у меня сознательной жизни(ну это я образно=) ) Я до сих пор пребываю в состоянии культурно-эстетического шока =)
        
        
            
 ISith,
            21 Января 2010
        
        
        
             - 
        
        
                +66.6        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 
                        //Дефайн в некотором хэдере
#define _TAPI(b) do {BOOL _b = (BOOL)(b); if (!b) throw(system_exception(GetLastError())); } while (false);
//...
// И далее такое:
//...
_TAPI (::CreateProcess(0, (LPWSTR)m_process.c_str(), 0, 
				0, FALSE, CREATE_SUSPENDED, 0, 0, &si, &pi));
                                     
        
            Мой говнокод, хотя скорее опечатка =), я с такими явлениями уже не раз сталкивался, но все равно в течение получаса не мог понять, почему у меня по два процесса запускается =)))
        
        
            
 ISith,
            15 Января 2010