VOID SetRealTimeMode( const HWND hWnd, const BOOL bRealTime, const HANDLE * phChildThread, LPTSTR lpszWindowText ) { // int i; UNREFERENCED_PARAMETER( phChildThread ); // if( bRealTime ) { g_bRealTime = TRUE; SetPriorityClass( GetCurrentProcess(), REALTIME_PRIORITY_CLASS ); // SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL ); CheckMenuItem( GetMenu( hWnd ), IDM_REALTIME, MF_BYCOMMAND | MFS_CHECKED ); /* for( i = 0; i < 4; i++ ) { if( g_bHack[ i ] && phChildThread[ i ] != NULL ) { SetThreadPriority( phChildThread[ i ], THREAD_PRIORITY_HIGHEST ); } } */ WriteDebugLog( TEXT( "Real-time mode: Yes" ) ); } else { g_bRealTime = FALSE; SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS ); // SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_NORMAL ); CheckMenuItem( GetMenu( hWnd ), IDM_REALTIME, MF_BYCOMMAND | MFS_UNCHECKED ); /* for( i = 0; i < 4; i++ ) { if( g_bHack[ i ] && phChildThread[ i ] != NULL ) { SetThreadPriority( phChildThread[ i ], THREAD_PRIORITY_NORMAL ); } } */ WriteDebugLog( TEXT( "Real-time mode: No" ) ); } if( lpszWindowText != NULL ) { wsprintf( lpszWindowText, TEXT( "%s - %s%s" ), APP_NAME, IsActive() ? TEXT( "Active" ) : TEXT( "Idle" ), g_bRealTime ? TEXT( " (Real-time mode)" ) : TEXT( "" ) ); SetWindowText( hWnd, lpszWindowText ); } }
int test_outputfunc() { LOG *g = NULL ; g = CreateLogHandle() ; if( g == NULL ) { printf( "创建日志句柄失败errno[%d]\n" , errno ); return -1; } else { printf( "创建日志句柄成功\n" ); } SetLogOutput( g , LOG_OUTPUT_CALLBACK , "127.0.0.1:514" , & MyOpenLogFirst , NULL , & MyWriteLog , NULL , NULL , & MyCloseLogFinally ); SetLogLevel( g , LOG_LEVEL_INFO ); SetLogStyles( g , LOG_STYLES_LOG , LOG_NO_STYLEFUNC ); WriteDebugLog( g , __FILE__ , __LINE__ , "hello iLOG3\n" ); WriteInfoLog( g , __FILE__ , __LINE__ , "hello iLOG3\n" ); WriteWarnLog( g , __FILE__ , __LINE__ , "hello iLOG3\n" ); WriteErrorLog( g , __FILE__ , __LINE__ , "hello iLOG3\n" ); WriteFatalLog( g , __FILE__ , __LINE__ , "hello iLOG3\n" ); DestroyLogHandle( g ); printf( "销毁日志句柄\n" ); return 0; }
VOID Unwatch( HANDLE& hSema, HANDLE& hThread, BOOL * lpbWatch ) { *lpbWatch = FALSE; if( WaitForSingleObject( hSema, 1000UL ) == WAIT_OBJECT_0 ) { WriteDebugLog( TEXT( "Closing hChildThread[ 3 ]" ) ); if( hThread ) { CloseHandle( hThread ); hThread = NULL; } ReleaseSemaphore( hSema, 1L, (LPLONG) NULL ); } else { WriteDebugLog( TEXT( "[!] Sema3 Error" ) ); } }
FILE *out_file_open(char *outFile, int rate, int *channels) { FILE *fout=NULL; if (strlen(outFile)==0) { unsigned int speex_channels = *channels; if (Set_WIN_Params (INVALID_FILEDESC, rate, SAMPLE_SIZE, speex_channels)) { WriteDebugLog("out_file_open -Can't access-WAVE OUT"); //fprintf (stderr, "Can't access %s\n", "WAVE OUT"); return 0; } } return fout; }
BOOL sendTeamTalkMessage(const PCOPYDATASTRUCT cpyData) { #ifdef _DEBUG g_hTeamTalkWnd = FindWindow("TeamTalkMainDialog_debug", 0); #else g_hTeamTalkWnd = FindWindow("TeamTalkMainDialog", 0); #endif if (g_hTeamTalkWnd && cpyData) { SendMessage(g_hTeamTalkWnd,WM_COPYDATA,0,(LPARAM)cpyData); return TRUE; } else { WriteDebugLog("Can't find the window."); } return FALSE; }
BOOL SetSliderIni( LPCTSTR lpszString, const int iSlider ) { if( iSlider <= 0 || iSlider > 99 || lstrlen( lpszString ) > 1000 ) return FALSE; WriteDebugLog( TEXT( "SetSliderIni" ) ); WriteDebugLog( lpszString ); TCHAR lpszExeName[ MAX_PATH * 2 ] = _T( "" ); /* - 1.1b7 int len = lstrlen( lpszTarget ); int start = -1; int end = -1; for( int i = len - 1; i >= 5; i-- ) { if( lpszTarget[ i ] == TEXT( ' ' ) && ( lpszTarget[ i - 1 ] == TEXT( 'e' ) || lpszTarget[ i - 1 ] == TEXT( 'E' ) ) && ( lpszTarget[ i - 2 ] == TEXT( 'x' ) || lpszTarget[ i - 2 ] == TEXT( 'X' ) ) && ( lpszTarget[ i - 3 ] == TEXT( 'e' ) || lpszTarget[ i - 3 ] == TEXT( 'E' ) ) && lpszTarget[ i - 4 ] == TEXT( '.' ) ) { end = i; break; } } for( ; i >=0; i-- ) { if( lpszTarget[ i ] == TEXT( '\\' ) ) { start = i + 1; break; } } if( start == -1 ) start = 0; if( end == -1 || end - start <= 0 ) { TCHAR dbg[1000]; wsprintf( dbg, TEXT("DEBUG: %s %d %d %d"), lpszTarget, start, end, end-start ); WriteDebugLog( dbg ) ; return FALSE; } lstrcpy( lpszExeName, &lpszTarget[ start ] ); lpszExeName[ end - start ] = TEXT( '\0' ); */ // +1.1b7 PathToExe( lpszString, lpszExeName, MAX_PATH * 2 ); #if !defined( _UNICODE ) if( lstrlen( lpszExeName ) >= 19 ) { lpszExeName[ 15 ] = '\0'; PathToExeEx( lpszExeName, MAX_PATH * 2 ); } #endif TCHAR lpszExeNameLower[ MAX_PATH * 2 ] = _TEXT( "" ); int len = lstrlen( lpszExeName ); for( int i = 0; i < len; i++ ) { TCHAR c = lpszExeName[ i ]; if( _istascii( c ) && _istupper( c ) ) { lpszExeNameLower[ i ] = (TCHAR) _totlower( c ); } else { lpszExeNameLower[ i ] = c; } } //lpszExeNameLower[ i ] = TEXT( '\0' ); TCHAR lpszPath[ MAX_PATH * 2 ]; GetIniPath( lpszPath ); TCHAR tmpstr[ 100 ]; wsprintf( tmpstr, TEXT( "%d" ), iSlider ); WritePrivateProfileString( TEXT( "Slider" ), lpszExeNameLower, tmpstr, lpszPath ); // to flushes the cache WritePrivateProfileString( NULL, NULL, NULL, lpszPath ); return TRUE; }
static void *process_header(ogg_packet *op, spx_int32_t enh_enabled, spx_int32_t *frame_size, int *granule_frame_size, spx_int32_t *rate, int *nframes, int forceMode, int *channels, SpeexStereoState *stereo, int *extra_headers, int quiet) { void *st; const SpeexMode *mode; SpeexHeader *header; int modeID; SpeexCallback callback; header = speex_packet_to_header((char*)op->packet, op->bytes); if (!header) { WriteDebugLog("Cannot read header"); //fprintf (stderr, "Cannot read header\n"); return NULL; } if (header->mode >= SPEEX_NB_MODES || header->mode<0) { WriteDebugLog("Mode number %d does not (yet/any longer) exist in this version"); //fprintf (stderr, "Mode number %d does not (yet/any longer) exist in this version\n", // header->mode); free(header); return NULL; } modeID = header->mode; if (forceMode!=-1) modeID = forceMode; mode = speex_lib_get_mode (modeID); if (header->speex_version_id > 1) { char Error[256] = {0}; sprintf(Error,"This file was encoded with Speex bit-stream version %d, which I don't know how to decode\n", header->speex_version_id); WriteDebugLog(Error); //fprintf (stderr, "This file was encoded with Speex bit-stream version %d, which I don't know how to decode\n", header->speex_version_id); free(header); return NULL; } if (mode->bitstream_version < header->mode_bitstream_version) { WriteDebugLog("The file was encoded with a newer version of Speex. You need to upgrade in order to play it."); //fprintf (stderr, "The file was encoded with a newer version of Speex. You need to upgrade in order to play it.\n"); free(header); return NULL; } if (mode->bitstream_version > header->mode_bitstream_version) { WriteDebugLog("The file was encoded with an older version of Speex. You would need to downgrade the version in order to play it."); //fprintf (stderr, "The file was encoded with an older version of Speex. You would need to downgrade the version in order to play it.\n"); free(header); return NULL; } st = speex_decoder_init(mode); if (!st) { WriteDebugLog("Decoder initialization failed."); //fprintf (stderr, "Decoder initialization failed.\n"); free(header); return NULL; } speex_decoder_ctl(st, SPEEX_SET_ENH, &enh_enabled); speex_decoder_ctl(st, SPEEX_GET_FRAME_SIZE, frame_size); *granule_frame_size = *frame_size; if (!*rate) *rate = header->rate; /* Adjust rate if --force-* options are used */ if (forceMode!=-1) { if (header->mode < forceMode) { *rate <<= (forceMode - header->mode); *granule_frame_size >>= (forceMode - header->mode); } if (header->mode > forceMode) { *rate >>= (header->mode - forceMode); *granule_frame_size <<= (header->mode - forceMode); }
DWORD WINAPI LimitPlus( LPVOID lpVoid ) { int i, j; LPHACK_PARAMS lphp = (LPHACK_PARAMS) lpVoid; const HWND hWnd = lphp->myHwnd; const LPTARGETINFO lpTarget = lphp->lpTarget; EnableMenuItem( GetMenu( hWnd ), IDM_WATCH, MF_BYCOMMAND | MF_GRAYED ); EnableMenuItem( GetMenu( hWnd ), IDM_UNWATCH, MF_BYCOMMAND | MF_ENABLED ); g_dwTargetProcessId[ 2 ] = WATCHING_IDLE; UpdateStatus( hWnd ); TCHAR lpszTargetPath[ MAX_PATH * 2 ]; TCHAR lpszTargetExe[ MAX_PATH * 2 ]; lstrcpy( lpszTargetPath, lpTarget->szPath ); lstrcpy( lpszTargetExe, lpTarget->szExe ); wsprintf( g_szTarget[ 2 ], TEXT( "%s (Watching)" ), lpszTargetPath ); for( i = 8; i < 12; i++ ) { lstrcpy( lphp->lpszStatus[ i ], TEXT( "" ) ); } lstrcpy( lphp->lpszStatus[ 13 ], TEXT( "Watching..." ) ); TCHAR str[ MAX_PATH * 2 ]; #ifdef _UNICODE lstrcpy( lphp->lpszStatus[ 14 ], lpszTargetPath ); #else lstrcpy( str, lpszTargetPath ); if( lstrlen( str ) >= 19 ) { str[ 15 ] = '\0'; PathToExeEx( str, MAX_PATH * 2 ); } lstrcpy( lphp->lpszStatus[ 14 ], str ); #endif wsprintf( str, TEXT( "Watching : %s" ), lpszTargetPath ); WriteDebugLog( str ); AdjustLength( lphp->lpszStatus[ 14 ] ); g_Slider[ 2 ] = (BYTE) GetSliderIni( lpszTargetPath ); for( ; ; ) { if( lphp->lpTarget->dwProcessId == TARGET_PID_NOT_SET ) { g_dwTargetProcessId[ 2 ] = PathToProcess( lpszTargetPath ); } else { g_dwTargetProcessId[ 2 ] = lphp->lpTarget->dwProcessId; wsprintf( str, TEXT( "Watching : ProcessID given : %08lX" ), g_dwTargetProcessId[ 2 ] ); WriteDebugLog( str ); } if( g_dwTargetProcessId[ 2 ] == g_dwTargetProcessId[ 0 ] ) { if( g_bHack[ 0 ] ) { SendMessage( hWnd, WM_USER_STOP, 0U, 0L ); } Sleep( 500UL ); for( i = 0; i < 4; i++ ) { lstrcpy( lphp->lpszStatus[ i ], TEXT( "" ) ); } g_dwTargetProcessId[ 0 ] = TARGET_PID_NOT_SET; lstrcpy( g_szTarget[ 0 ], TARGET_UNDEF ); } else if( g_dwTargetProcessId[ 2 ] == g_dwTargetProcessId[ 1 ] ) { if( g_bHack[ 1 ] ) { SendMessage( hWnd, WM_USER_STOP, 1U, 0L ); } Sleep( 500UL ); for( i = 4; i < 8; i++ ) { lstrcpy( lphp->lpszStatus[ i ], TEXT( "" ) ); } g_dwTargetProcessId[ 1 ] = TARGET_PID_NOT_SET; lstrcpy( g_szTarget[ 1 ], TEXT( "<target not specified>" ) ); } if( g_dwTargetProcessId[ 2 ] == (DWORD) -1 ) { if( lstrcmp( lphp->lpszStatus[ 15 ], TEXT( "Not found" ) ) != 0 ) { wsprintf( lphp->lpszStatus[ 15 ], TEXT( "Not found" ) ); InvalidateRect( hWnd, NULL, TRUE ); } for( j = 0; j < 80; j++ ) // wait 8 seconds { Sleep( 100UL ); if( ! g_bHack[ 3 ] ) goto EXIT_THREAD; } } else { wsprintf( str, TEXT( "Watching : Found! <%s>" ), lpszTargetPath ); WriteDebugLog( str ); lphp->lpTarget->dwProcessId = g_dwTargetProcessId[ 2 ]; lstrcpy( lphp->lpTarget->szPath, lpszTargetPath ); lstrcpy( lphp->lpTarget->szExe , lpszTargetExe ); lstrcpy( lphp->lpTarget->szText, TEXT( "" ) ); g_Slider[ 2 ] = (BYTE) GetSliderIni( lpszTargetPath ); SendMessage( hWnd, WM_USER_HACK, (WPARAM) 2, (LPARAM) lphp ); UpdateStatus( hWnd ); wsprintf( lphp->lpszStatus[ 15 ], TEXT( "Found ( %08lX )" ), g_dwTargetProcessId[ 2 ] ); InvalidateRect( hWnd, NULL, TRUE ); while( g_dwTargetProcessId[ 2 ] != TARGET_PID_NOT_SET ) { Sleep( 100UL ); if( g_bHack[ 3 ] == FALSE ) { WriteDebugLog( TEXT( "g_bHack[ 3 ] == FALSE" ) ); goto EXIT_THREAD; } } if( WaitForSingleObject( hSemaphore[ 2 ], 1000UL ) != WAIT_OBJECT_0 ) { g_bHack[ 2 ] = FALSE; MessageBox( hWnd, TEXT("Sema Error in LimitPlus()"), APP_NAME, MB_OK | MB_ICONEXCLAMATION ); goto EXIT_THREAD; } g_dwTargetProcessId[ 2 ] = WATCHING_IDLE; UpdateStatus( hWnd ); } } EXIT_THREAD: WriteDebugLog( TEXT( "Watch: Exiting Thread..." ) ); // if the Watched is idle, we will free the slot #2 when 'unwatch' is posted // (Otherwise, #2 should be still active) if( g_dwTargetProcessId[ 2 ] == WATCHING_IDLE ) { g_dwTargetProcessId[ 2 ] = TARGET_PID_NOT_SET; lphp->lpTarget->dwProcessId = TARGET_PID_NOT_SET; g_bHack[ 2 ] = FALSE; ReleaseSemaphore( hSemaphore[ 2 ], 1L, (LONG *) NULL ); } if( ReleaseSemaphore( hSemaphore[ 3 ], 1L, (LONG *) NULL ) ) { WriteDebugLog( TEXT( "* Sema3 Released" ) ); } else { WriteDebugLog( TEXT( "[!] Sema3 Not released" ) ); } lstrcpy( lphp->lpszStatus[ 13 ], TEXT( "* Not watching *" ) ); lstrcpy( lphp->lpszStatus[ 14 ], lpszTargetPath ); AdjustLength( lphp->lpszStatus[ 14 ] ); lstrcpy( lphp->lpszStatus[ 15 ], TEXT( "" ) ); InvalidateRect( hWnd, NULL, TRUE ); if( ! g_bHack[ 2 ] ) { EnableMenuItem( GetMenu( hWnd ), IDM_WATCH, MF_BYCOMMAND | MF_ENABLED ); } EnableMenuItem( GetMenu( hWnd ), IDM_UNWATCH, MF_BYCOMMAND | MF_GRAYED ); UpdateStatus( hWnd ); g_bHack[ 3 ] = FALSE; // just in case return NOT_WATCHING; }
int GetArgument( LPCTSTR lpszCmdLine, int iBufferSize, LPTSTR lpszMyPath, LPTSTR lpszTargetLongPath, LPTSTR lpszTargetLongExe ) { if( iBufferSize > MAX_PATH * 2 ) iBufferSize = MAX_PATH * 2; TCHAR lpszTargetPath[ MAX_PATH * 2 ] = _T( "" ); TCHAR p[ 1024 ]; lstrcpy( p, lpszCmdLine ); int s = 0; while( p[ s ] == TEXT( ' ' ) ) { s++; } TCHAR * p1; TCHAR * p2; if( p[ s ] == TEXT( '\"' ) ) { if( lstrlen( &p[ s + 1 ] ) >= iBufferSize ) return IGNORE_ARGV; else lstrcpy( lpszMyPath, &p[ s + 1 ] ); p1 = _tcschr( lpszMyPath, TEXT( '\"' ) ); if( !p1 ) return IGNORE_ARGV; else p1[ 0 ] = TEXT( '\0' ); if( p1[ 1 ] != TEXT( ' ' ) ) return IGNORE_ARGV; else p2 = &p1[ 2 ]; } else { if( lstrlen( &p[ s ] ) >= iBufferSize ) return IGNORE_ARGV; else lstrcpy( lpszMyPath, &p[ s ] ); p1 = _tcschr( lpszMyPath, TEXT( ' ' ) ); if( !p1 ) return IGNORE_ARGV; else p1[ 0 ] = TEXT( '\0' ); p2 = &p1[ 1 ]; } WriteDebugLog( lpszMyPath ); s = 0; while( p2[ s ] == TEXT( ' ' ) ) { s++; } if( p2[ s ] == TEXT( '\"' ) ) { lstrcpy( lpszTargetPath, &p2[ s + 1 ] ); p1 = _tcschr( lpszTargetPath, TEXT( '\"' ) ); if( !p1 ) return IGNORE_ARGV; else p1[ 0 ] = TEXT( '\0' ); if( p1[ 1 ] == TEXT( ' ' ) ) { p2 = &p1[ 2 ]; } else { p2 = p1; // TEXT( '\0' ) } } else { lstrcpy( lpszTargetPath, &p2[ s ] ); p1 = _tcschr( lpszTargetPath, TEXT( ' ' ) ); if( p1 ) { p1[ 0 ] = TEXT( '\0' ); p2 = &p1[ 1 ]; } else { p2 = p1; // TEXT( '\0' ) } } int len = lstrlen( lpszTargetPath ); if( len < 5 ) return IGNORE_ARGV; // if( lstrcmpi( &lpszTargetPath[ len - 4 ], TEXT( ".exe" ) ) != 0 ) return IGNORE_ARGV; WriteDebugLog( lpszTargetPath ); DWORD dwResult = GetLongPathName( lpszTargetPath, lpszTargetLongPath, (DWORD) iBufferSize ); if( dwResult == 0UL || dwResult > (DWORD) iBufferSize ) { lstrcpy( lpszTargetLongPath, lpszTargetPath ); } WriteDebugLog( lpszTargetLongPath ); PathToExe( lpszTargetLongPath, lpszTargetLongExe, iBufferSize ); WriteDebugLog( lpszTargetLongExe ); #if !defined( _UNICODE ) lstrcpy( lpszTargetLongPath, lpszTargetLongExe ); #endif int iSlider = _ttoi( p2 ); if( iSlider < 0 || iSlider > 99 ) { iSlider = 0; } WriteDebugLog( p2 ); return iSlider; }
LRESULT CALLBACK Settings( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { #define TIMER_ID_S (UINT) 'S' static LONG lSlider[ 3 ]; static int iPathId[ 3 ] = { IDC_EDIT_TARGET1, IDC_EDIT_TARGET2, IDC_EDIT_TARGET3 }; static int iButtonId[ 3 ] = { IDC_BUTTON_STOP1, IDC_BUTTON_STOP2, IDC_BUTTON_STOP3 }; static int iTextId[ 3 ] = { IDC_TEXT_TARGET1, IDC_TEXT_TARGET2, IDC_TEXT_TARGET3 }; static int iSliderId[ 3 ] = { IDC_SLIDER1, IDC_SLIDER2, IDC_SLIDER3 }; static HWND hWnd; static int iMyId; static LPTSTR * lpszStatus; static TCHAR lpszWindowText[ 1024 ]; static HFONT hMyFont = NULL; switch (message) { case WM_INITDIALOG: { hWnd = ( ( LPHACK_PARAMS ) lParam ) -> myHwnd; iMyId = ( ( LPHACK_PARAMS ) lParam ) -> iMyId; lpszStatus = ( ( LPHACK_PARAMS ) lParam ) -> lpszStatus; HDC hDC = GetDC( hDlg ); hMyFont = MyCreateFont( hDC, TEXT( "Verdana" ), 12, TRUE, FALSE ); ReleaseDC( hDlg, hDC ); #ifdef _UNICODE if( IS_JAPANESE ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, IS_JAPANESEo ? S_JPNo_1002 : S_JPN_1002, -1, lpszWindowText, 1023 ); SetWindowText( hDlg, lpszWindowText ); } else if( IS_FRENCH ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_FRE_1002, -1, lpszWindowText, 1023 ); SetWindowText( hDlg, lpszWindowText ); } else if( IS_SPANISH ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_SPA_1002, -1, lpszWindowText, 1023 ); SetWindowText( hDlg, lpszWindowText ); } else #endif { lstrcpy( lpszWindowText, _T( "Limiter control" ) ); SetWindowText( hDlg, lpszWindowText ); } for( int i = 0; i < 3; i++ ) { lSlider[ i ] = (long) g_Slider[ i ]; SetDlgItemText( hDlg, iPathId[ i ], g_szTarget[ i ] ); TCHAR tmpstr[ 100 ]; wsprintf( tmpstr, TEXT( "%s #&%d" ), ( ( g_bHack[ i ] )? TEXT( "Unlimit" ) : TEXT( "Limit" ) ), i + 1 ); SetDlgItemText( hDlg, iButtonId[ i ], tmpstr ); EnableWindow( GetDlgItem( hDlg, iButtonId[ i ] ), ( g_dwTargetProcessId[ i ] != TARGET_PID_NOT_SET ) ); EnableWindow( GetDlgItem( hDlg, iSliderId[ i ] ), ( g_dwTargetProcessId[ i ] != TARGET_PID_NOT_SET ) ); EnableWindow( GetDlgItem( hDlg, iTextId[ i ] ), ( g_dwTargetProcessId[ i ] != TARGET_PID_NOT_SET ) ); SendDlgItemMessage( hDlg, iSliderId[ i ], TBM_SETRANGE, TRUE, MAKELONG( 1, 99 ) ); SendDlgItemMessage( hDlg, iSliderId[ i ], TBM_SETPOS, TRUE, lSlider[ i ] ); for( long lPos = 10L; lPos <= 90L; lPos += 10L ) { SendDlgItemMessage( hDlg, iSliderId[ i ], TBM_SETTIC, 0U, lPos ); } SendDlgItemMessage( hDlg, iTextId[ i ], WM_SETFONT, ( WPARAM ) hMyFont, 0L ); SetSliderText( hDlg, iTextId[ i ] , lSlider[ i ] ); } if( g_dwTargetProcessId[ 2 ] == (DWORD) -1 || g_bHack[ 3 ] ) { SetDlgItemText( hDlg, iButtonId[ 2 ], TEXT( "(Watching)" ) ); EnableWindow( GetDlgItem( hDlg, iButtonId[ 2 ] ), FALSE ); EnableWindow( GetDlgItem( hDlg, iTextId[ 2 ] ), TRUE ); } // Anti-Ukagaka SetTimer( hDlg, TIMER_ID_S, 500U, (TIMERPROC) NULL ); break; } case WM_CTLCOLORSTATIC: { for( int i = 0; i < 3; i++ ) { HWND hEdit = GetDlgItem( hDlg, iTextId[ i ] ); if( (HWND) lParam == hEdit ) { HDC hDC = (HDC) wParam; SetBkMode( hDC, TRANSPARENT ); SetBkColor( hDC, GetSysColor( COLOR_3DFACE ) ); SetTextColor( hDC, RGB( 0,0,0xaa ) ); return (BOOL) (HBRUSH) GetSysColorBrush( COLOR_3DFACE ); } } return 0L; } case WM_HSCROLL: { if( GetDlgItem( hDlg, IDC_SLIDER1 ) == (HWND) lParam && SliderMoved( wParam ) ) { const RECT minirect = { 20L, 20L + 90L * 0L, 479L, 40L + 90L * 0L }; lSlider[ 0 ] = SendDlgItemMessage( hDlg, IDC_SLIDER1, TBM_GETPOS, 0U, 0L ); SetSliderText( hDlg, IDC_TEXT_TARGET1, lSlider[ 0 ] ); g_Slider[ 0 ] = GetSliderParam( lSlider[ 0 ] ); if( g_bHack[ 0 ] ) { wsprintf( lpszStatus[ 0 ], TEXT( "Target #1 [ -%d%% ]" ), g_Slider[ 0 ] ); InvalidateRect( hWnd, &minirect, 0 ); } } else if( GetDlgItem( hDlg, IDC_SLIDER2 ) == (HWND) lParam && SliderMoved( wParam ) ) { const RECT minirect = { 20L, 20L + 90L * 1L, 479L, 40L + 90L * 1L }; lSlider[ 1 ] = SendDlgItemMessage( hDlg, IDC_SLIDER2, TBM_GETPOS, 0U, 0L ); SetSliderText( hDlg, IDC_TEXT_TARGET2, lSlider[ 1 ] ); g_Slider[ 1 ] = GetSliderParam( lSlider[ 1 ] ); if( g_bHack[ 1 ] ) { wsprintf( lpszStatus[ 0 + 4 * 1 ], TEXT( "Target #2 [ -%d%% ]" ), g_Slider[ 1 ] ); InvalidateRect( hWnd, &minirect, 0 ); } } else if( GetDlgItem( hDlg, IDC_SLIDER3 ) == (HWND) lParam && SliderMoved( wParam ) ) { const RECT minirect = { 20L, 20L + 90L * 2L, 479L, 40L + 90L * 2L }; lSlider[ 2 ] = SendDlgItemMessage( hDlg, IDC_SLIDER3, TBM_GETPOS, 0U, 0L ); SetSliderText( hDlg, IDC_TEXT_TARGET3, lSlider[ 2 ] ); g_Slider[ 2 ] = GetSliderParam( lSlider[ 2 ] ); if( g_bHack[ 2 ] ) { wsprintf( lpszStatus[ 0 + 4 * 2 ], TEXT( "Target #3 [ -%d%% ]" ), g_Slider[ 2 ] ); InvalidateRect( hWnd, &minirect, 0 ); } } break; } case WM_COMMAND: { switch( LOWORD( wParam ) ) { case IDOK: { TCHAR msg[ 4096 ]; int i; for( i = 0; i < 3; i++ ) { if( g_dwTargetProcessId[ i ] != 0UL ) { wsprintf( msg, TEXT( "g_Slider[ %d ] = %d : %s" ), i, (int) g_Slider[ i ], g_szTarget[ i ] ); WriteDebugLog( msg ); SetSliderIni( g_szTarget[ i ], (int) g_Slider[ i ] ); } } EndDialog( hDlg, TRUE ); break; } case IDCANCEL: { EndDialog( hDlg, FALSE ); break; } case IDC_BUTTON_STOP1: { if( g_bHack[ 0 ] ) { SendMessage( hWnd, WM_USER_STOP, 0U, 0L ); SetDlgItemText( hDlg, iButtonId[ 0 ], TEXT( "Limit #&1" ) ); } else { SendMessage( hWnd, WM_USER_RESTART, 0U, 0L ); SetDlgItemText( hDlg, iButtonId[ 0 ], TEXT( "Unlimit #&1" ) ); } break; } case IDC_BUTTON_STOP2: { if( g_bHack[ 1 ] ) { SendMessage( hWnd, WM_USER_STOP, 1U, 0L ); SetDlgItemText( hDlg, iButtonId[ 1 ], TEXT( "Limit #&2" ) ); } else { SendMessage( hWnd, WM_USER_RESTART, 1U, 0L ); SetDlgItemText( hDlg, iButtonId[ 1 ], TEXT( "Unlimit #&2" ) ); } break; } case IDC_BUTTON_STOP3: { if( g_bHack[ 2 ] ) { SendMessage( hWnd, WM_USER_STOP, 2U, 0L ); SetDlgItemText( hDlg, iButtonId[ 2 ], TEXT( "Limit #&3" ) ); } else { SendMessage( hWnd, WM_USER_RESTART, 2U, 0L ); SetDlgItemText( hDlg, iButtonId[ 2 ], TEXT( "Unlimit #&3" ) ); } break; } default: { break; } } break; // <-- fixed @ 1.1 beta3 } case WM_TIMER: { SetWindowText( hDlg, lpszWindowText ); break; } case WM_DESTROY: { DeleteFont( hMyFont ); hMyFont = NULL; KillTimer( hDlg, TIMER_ID_S ); break; } default: return 0L;//FALSE; } return 1L;//TRUE; }
DWORD WINAPI Hack( LPVOID lpVoid ) { TCHAR msg[ 4096 ]; LPHACK_PARAMS lphp = (LPHACK_PARAMS) lpVoid; HWND hWnd = lphp -> myHwnd; const int iMyId = lphp -> iMyId; LPTARGETINFO lpTarget = lphp -> lpTarget; LPTSTR * lpszStatus = lphp -> lpszStatus; DWORD dwTargetProcessId = lpTarget -> dwProcessId; DWORD dwPrevSuspendCount; DWORD dwTotalChanges = 0; int iPrevThreadCount = 0; int errorflag = 0; const RECT minirect = { 20L, 20L + 90L * iMyId, 479L, 40L + 90L * iMyId }; const RECT hackrect = { 20L, 20L + 90L * iMyId, 479L, 100L + 90L * iMyId }; TCHAR lpszEnemyPath[ MAX_PATH * 2 ] = _T(""); TCHAR lpszEnemyExe[ MAX_PATH * 2 ] = _T(""); lstrcpy( lpszEnemyPath, lpTarget->szPath ); lstrcpy( lpszEnemyExe, lpTarget->szExe ); int i , j; HANDLE hProcess = NULL; DWORD dwOldPriority = NORMAL_PRIORITY_CLASS; int iOpenThreadRetry = 0; int iSuspendThreadRetry = 0; int iResumeThreadRetry = 0; SYSTEMTIME st; for( i = 0 + iMyId * 4; i < 4 + iMyId * 4; i++ ) { lstrcpy( lpszStatus[ i ], TEXT( "" ) ); } lstrcpy( lpszStatus[ 2 + iMyId * 4 ], lpszEnemyPath ); #if !defined( _UNICODE ) // for watching... if( iMyId == 2 && lstrlen( lpszEnemyPath ) >= 19 ) { lpszStatus[ 2 + iMyId * 4 ][ 15 ] = '\0'; PathToExeEx( lpszStatus[ 2 + iMyId * 4 ], MAX_PATH * 2 ); } #endif AdjustLength( lpszStatus[ 2 + iMyId * 4 ] ); for( DWORD dwOuterLoops = 0; g_bHack[ iMyId ]; dwOuterLoops++ ) { if( dwOuterLoops == 0UL ) { hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION , FALSE, dwTargetProcessId ); if( hProcess ) { dwOldPriority = GetPriorityClass( hProcess ); wsprintf( msg, TEXT( "Target #%d: \"%s\"\r\n\tProcess ID = 0x%08lX : hProcess = 0x%08lX (Priority: %lu)" ), iMyId + 1, lpszEnemyPath, dwTargetProcessId, hProcess, dwOldPriority ); WriteDebugLog( msg ); if( g_bRealTime ) { WriteDebugLog( SetPriorityClass( hProcess, IDLE_PRIORITY_CLASS )? TEXT( "SetPriorityClass OK" ) : TEXT( "SetPriorityClass failed" ) ); } } else { WriteDebugLog( TEXT( "OpenProcess failed." ) ); GetLocalTime( &st ); wsprintf( lpszStatus[ 1 + iMyId * 4 ], TEXT( "Process ID = n/a" ) ); wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d Initial OpenThread failed" ), st.wHour, st.wMinute, st.wSecond ); g_dwTargetProcessId[ iMyId ] = TARGET_PID_NOT_SET; // This is needed as a workaround UpdateStatus( hWnd ); if( ReleaseSemaphore( hSemaphore[ iMyId ], 1L, (LPLONG) NULL ) ) { wsprintf( msg, TEXT( "* ReleaseSemaphore #%d in Hack()" ), iMyId + 1 ); WriteDebugLog( msg ); } else { wsprintf( msg, TEXT( "[!] Target #%d : ReleaseSemaphore failed in Hack(): ErrCode %lu" ), iMyId + 1, GetLastError() ); WriteDebugLog( msg ); } lphp->lpTarget->dwProcessId = TARGET_PID_NOT_SET; if( PathToProcess( lpszEnemyPath ) == ( DWORD ) -1 ) { SendMessageCallback( hWnd, WM_USER_STOP, (WPARAM) iMyId, (LPARAM) TARGET_MISSING, (SENDASYNCPROC) DummyCallback, (DWORD) hWnd ); InvalidateRect( hWnd, NULL, TRUE ); return TARGET_MISSING; } else { SendMessageCallback( hWnd, WM_USER_STOP, (WPARAM) iMyId, (LPARAM) THREAD_NOT_OPENED, (SENDASYNCPROC) DummyCallback, (DWORD) hWnd ); InvalidateRect( hWnd, NULL, TRUE ); return THREAD_NOT_OPENED; } } wsprintf( lpszStatus[ 0 + iMyId * 4 ], TEXT( "Target #%d [ -%d%% ]" ), iMyId + 1, g_Slider[ iMyId ] ); } // endif( dwOuterLoops == 0 ) DWORD dwThreadId[ MAX_THREAD_CNT ]; int iThreadCount = ListProcessThreads( dwTargetProcessId, dwThreadId ); // ----------------------- @@@ if( iThreadCount == 0 ) { GetLocalTime( &st ); wsprintf( lpszStatus[ 1 + iMyId * 4 ], TEXT( "Process ID = n/a" ) ); wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d No threads" ), st.wHour, st.wMinute, st.wSecond ); g_dwTargetProcessId[ iMyId ] = TARGET_PID_NOT_SET; if( hProcess ) { SetPriorityClass( hProcess, dwOldPriority ); CloseHandle( hProcess ); } if( ReleaseSemaphore( hSemaphore[ iMyId ], 1L, (LPLONG) NULL ) ) { wsprintf( msg, TEXT( "* TARGET_MISSING #%d : ReleaseSemaphore in Hack()" ), iMyId + 1 ); WriteDebugLog( msg ); } else { wsprintf( msg, TEXT( "[!] Target #%d : ReleaseSemaphore failed in Hack(): ErrCode %lu" ), iMyId + 1, GetLastError() ); WriteDebugLog( msg ); } g_bBlock = TRUE; WriteDebugLog( TEXT("SendMessage Doing...") ); SendMessageCallback( hWnd, WM_USER_STOP, (WPARAM) iMyId, (LPARAM) TARGET_MISSING, (SENDASYNCPROC) DummyCallback, (DWORD) hWnd ); WriteDebugLog( TEXT("SendMessage Done!") ); for( int z = 0; z < 10; z++ ) { if( ! g_bBlock ) { wsprintf( msg, TEXT("g_bBlock cleared at z=%d"), z ); WriteDebugLog( msg ); break; } Sleep( 10UL ); } lphp->lpTarget->dwProcessId = TARGET_PID_NOT_SET; // [email protected] beta // This is not needed because WM_USER_STOP will do the same, // and this thread will die (so thie order wil be probably void) anyway // InvalidateRect( hWnd, NULL, TRUE ); return TARGET_MISSING; } if( dwOuterLoops == 0UL ) { iPrevThreadCount = iThreadCount; wsprintf( msg, TEXT( "Target #%d : iThreadCount = %3d" ), iMyId + 1, iThreadCount ); WriteDebugLog( msg ); } else if( dwOuterLoops % 50UL == 0UL ) { wsprintf( msg, TEXT( "Target #%d : Loops %5d, ThreadCnt %3d (Prev %3d)" ), iMyId + 1, dwOuterLoops, iThreadCount, iPrevThreadCount ); WriteDebugLog( msg ); } wsprintf( lpszStatus[ 1 + iMyId * 4 ], TEXT( "Process ID = 0x%04X %04X [ %d %s ]" ), HIWORD( dwTargetProcessId ), LOWORD( dwTargetProcessId ), iThreadCount, ( iThreadCount > 1 ? TEXT( "Threads" ) : TEXT( "Thread" ) ) ); GetLocalTime( &st ); if( iThreadCount != iPrevThreadCount || errorflag ) { dwTotalChanges++; wsprintf( msg, TEXT( "Target #%d : iThreadCount = %3d (Prev = %d)" ), iMyId + 1, iThreadCount, iPrevThreadCount ); WriteDebugLog( msg ); iPrevThreadCount = iThreadCount; errorflag = 0; wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d Target Re-Locked On: OK" ), st.wHour, st.wMinute, st.wSecond ); } else { wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d %s: OK" ), st.wHour, st.wMinute, st.wSecond, dwOuterLoops == 0 ? TEXT( "Started" ) : TEXT( "Calm" ) ); } HANDLE hTarget[ MAX_THREAD_CNT ]; ZeroMemory( hTarget, sizeof( HANDLE ) * MAX_THREAD_CNT ); int iOpenedThread = 0; for( i = 0; i < iThreadCount; i++ ) { hTarget[ i ] = OpenThread( THREAD_SUSPEND_RESUME, FALSE, dwThreadId[ i ] ); if( hTarget[ i ] == NULL ) { wsprintf( msg, TEXT( "[!] Target #%d : OpenThread failed: Thread #%03d, ThreadId 0x%08lX" ), iMyId + 1, i + 1, dwThreadId[ i ] ); WriteDebugLog( msg ); } else { iOpenedThread++; } } // ###---------------- if( iOpenedThread == 0 || iOpenedThread != iThreadCount && iOpenThreadRetry > 10 || iSuspendThreadRetry > 100 || iResumeThreadRetry > 50 ) { GetLocalTime( &st ); if( iResumeThreadRetry > 50 ) { wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d ResumeThread Error" ), st.wHour, st.wMinute, st.wSecond ); // to do // 'unfreeze' } else if( iSuspendThreadRetry > 100 ) { wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d SuspendThread Error" ), st.wHour, st.wMinute, st.wSecond ); } else { wsprintf( lpszStatus[ 3 + iMyId * 4 ], TEXT( "%02d:%02d:%02d OpenThread Error" ), st.wHour, st.wMinute, st.wSecond ); } WriteDebugLog( lpszStatus[ 3 + iMyId * 4 ] ); WriteDebugLog( TEXT( "### Giving up... ###" ) ); lphp->lpTarget->dwProcessId = TARGET_PID_NOT_SET; //? g_dwTargetProcessId[ iMyId ] = TARGET_PID_NOT_SET; if( hProcess ) { SetPriorityClass( hProcess, dwOldPriority ); CloseHandle( hProcess ); } // This is needed as a workaround ? (Possibly this works as a workaround) 1.0 beta6 UpdateStatus( hWnd ); if( ReleaseSemaphore( hSemaphore[ iMyId ], 1L, NULL ) ) { wsprintf( msg, TEXT( "* THREAD_NOT_OPENED #%d : ReleaseSemaphore in Hack()" ), iMyId + 1 ); WriteDebugLog( msg ); } BOOL bMissing = ( PathToProcess( lpszEnemyPath ) == ( DWORD ) -1 ); WriteDebugLog( TEXT("SendMessage Doing...") ); SendMessageCallback( hWnd, WM_USER_STOP, (WPARAM) iMyId, bMissing? TARGET_MISSING : THREAD_NOT_OPENED, (SENDASYNCPROC) DummyCallback, (DWORD) hWnd ); WriteDebugLog( TEXT("SendMessage Done!") ); lphp->lpTarget->dwProcessId = TARGET_PID_NOT_SET; InvalidateRect( hWnd, NULL, TRUE ); return ( bMissing ) ? TARGET_MISSING : THREAD_NOT_OPENED ; } else if( iOpenedThread != iThreadCount ) { for( j = 0; j < i; j++ ) if( hTarget[ j ] ) CloseHandle( hTarget[ j ] ); iOpenThreadRetry++; wsprintf( msg, TEXT( "@ Couldn't open some threads: Retrying #%d..." ), iOpenThreadRetry ); WriteDebugLog( msg ); Sleep( 100UL ); continue; } iOpenThreadRetry = 0; if( g_bHack[ 0 ] || g_bHack[ 1 ] || g_bHack[ 2 ] ) { TCHAR strStatus[ 1024 ] = TEXT( " Limiting CPU load:" ); #ifdef _UNICODE if( IS_JAPANESE ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_JPN_2000, -1, strStatus, 1023 ); } else if( IS_FINNISH ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_FIN_2000, -1, strStatus, 1023 ); } else if( IS_SPANISH ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_SPA_2000, -1, strStatus, 1023 ); } else if( IS_CHINESE_T ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_CHI_2000T, -1, strStatus, 1023 ); } else if( IS_CHINESE_S ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_CHI_2000S, -1, strStatus, 1023 ); } else if( IS_FRENCH ) { MultiByteToWideChar( CP_UTF8, MB_CUTE, S_FRE_2000, -1, strStatus, 1023 ); } #endif if( g_bHack[ 0 ] ) { lstrcat( strStatus, TEXT( " #1" ) ); } if( g_bHack[ 1 ] ) { lstrcat( strStatus, TEXT( " #2" ) ); } if( g_bHack[ 2 ] && g_dwTargetProcessId[ 2 ] != (DWORD) -1 ) { lstrcat( strStatus, TEXT( " #3" ) ); } wsprintf( lpszStatus[ 12 ], TEXT( "%s" ), strStatus ); } else { lstrcpy( lpszStatus[ 12 ], TEXT( "" ) ); } InvalidateRect( hWnd, &hackrect, FALSE ); for( DWORD dwInnerLoops = 1; dwInnerLoops <= MAX_INNER_LOOPS; dwInnerLoops++ ) { BYTE TimeRed = g_Slider[ iMyId ]; BYTE TimeGreen = (BYTE)( 100 - TimeRed ); for( i = 0; i < iThreadCount; i++ ) { if( ! hTarget[ i ] ) continue; dwPrevSuspendCount = SuspendThread( hTarget[ i ] ); if( ( DWORD ) -1 == dwPrevSuspendCount ) { errorflag = 1; wsprintf( msg, TEXT( "Target #%d : SuspendThread failed (Thread #%03d) : Retry=%d" ), iMyId + 1, i + 1, iSuspendThreadRetry ); WriteDebugLog( msg ); } // else if( dwPrevSuspendCount != 0UL ) // { // WriteDebugLog( TEXT( "### dwPrevSuspendCount != 0UL" ) ); // do // { // dwPrevSuspendCount = ResumeThread( hTarget[ i ] ); // } // while( dwPrevSuspendCount > 1UL ); // } } if( errorflag == 1 ) { iSuspendThreadRetry++; } else { iSuspendThreadRetry = 0; } Sleep( (DWORD) TimeRed ); for( i = 0; i < iThreadCount; i++ ) { if( ! hTarget[ i ] ) continue; DWORD dwPrevSuspendCount = ResumeThread( hTarget[ i ] ); if( ( DWORD ) -1 == dwPrevSuspendCount ) { errorflag = 2; wsprintf( msg, TEXT( "Target #%d : ResumeThread failed: Thread #%03d, ThreadId 0x%08lX, iResumeThreadRetry=%d" ), iMyId + 1, i + 1, dwThreadId[ i ], iResumeThreadRetry ); WriteDebugLog( msg ); } // // else if( dwPrevSuspendCount != 1UL ) // { // WriteDebugLog( TEXT( "### dwPrevSuspendCount != 1UL" ) ); // do // { // dwPrevSuspendCount = ResumeThread( hTarget[ i ] ); // } // while( dwPrevSuspendCount > 1UL ); // } } if( errorflag == 2 ) { iResumeThreadRetry++; } else { iResumeThreadRetry = 0; } if( g_bHack[ iMyId ] == FALSE || errorflag ) { break; } Sleep( (DWORD) TimeGreen ); if( dwInnerLoops % 10UL == 0UL ) { wsprintf( lpszStatus[ 0 + iMyId * 4 ], TEXT( "Target #%d [ -%d%% ] %s" ), iMyId + 1, g_Slider[ iMyId ], ( dwInnerLoops % 20UL == 0UL )? _T( " " ) : #ifdef _UNICODE L"\x25CF" #else "*" #endif ); InvalidateRect( hWnd, &minirect, 0 ); } } for( i = 0; i < iThreadCount; i++ ) { if( hTarget[ i ] ) CloseHandle( hTarget[ i ] ); } } wsprintf( lpszStatus[ 1 + iMyId * 4 ], TEXT( "* Unlimited *" ) ); if( ReleaseSemaphore( hSemaphore[ iMyId ], 1L, (LONG *) NULL ) ) { wsprintf( msg, TEXT( "* Target #%d : ReleaseSemaphore in Hack()" ), iMyId + 1 ); WriteDebugLog( msg ); } else { wsprintf( msg, TEXT( "[!] Target #%d : ReleaseSemaphore failed in Hack(): ErrCode %lu" ), iMyId + 1, GetLastError() ); WriteDebugLog( msg ); } if( hProcess ) { WriteDebugLog( SetPriorityClass( hProcess, dwOldPriority )? TEXT( "Set dwOldPriority: OK" ) : TEXT( "Set dwOldPriority: Failed" ) ); CloseHandle( hProcess ); } lstrcpy( lpszStatus[ 3 + iMyId * 4 ], TEXT( "" ) ); return NORMAL_TERMINATION; }