95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| //  Detour Test Program (sleepold.cpp of sleepold.exe)
 | |
| //
 | |
| //  Microsoft Research Detours Package
 | |
| //
 | |
| //  Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| //
 | |
| 
 | |
| #include <windows.h>
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #pragma warning(push)
 | |
| #if _MSC_VER > 1400
 | |
| #pragma warning(disable:6102 6103) // /analyze warnings
 | |
| #endif
 | |
| #include <strsafe.h>
 | |
| #pragma warning(pop)
 | |
| #include <detours.h>
 | |
| 
 | |
| int __cdecl main(int argc, char **argv)
 | |
| {
 | |
|     STARTUPINFOA si;
 | |
|     PROCESS_INFORMATION pi;
 | |
|     CHAR szFullExe[MAX_PATH];
 | |
|     CHAR szCommand[MAX_PATH];
 | |
|     PCHAR pszFileExe;
 | |
|     PCHAR pszExe;
 | |
| 
 | |
|     ZeroMemory(&si, sizeof(si));
 | |
|     ZeroMemory(&pi, sizeof(pi));
 | |
|     si.cb = sizeof(si);
 | |
| 
 | |
| 
 | |
|     if (argc != 2) {
 | |
|         printf("size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe:"
 | |
|                " must take a single integer argument.\n");
 | |
|         fflush(stdout);
 | |
|         return 3;
 | |
|     }
 | |
| 
 | |
|     int repeats = atoi(argv[1]);
 | |
| 
 | |
|     if (repeats <= 0) {
 | |
|         printf("size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe:"
 | |
|                " End of the road, repeats=0.\n");
 | |
|         fflush(stdout);
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     if ((repeats % 2) == 0) {
 | |
| #ifdef DETOURS_OPTION_BITS
 | |
|         pszExe = "size" DETOURS_STRINGIFY(DETOURS_OPTION_BITS) ".exe";
 | |
| #else
 | |
|         pszExe = "size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe";
 | |
| #endif
 | |
|     }
 | |
|     else {
 | |
|         pszExe = "size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe";
 | |
|     }
 | |
| 
 | |
|     if (!SearchPathA(NULL, pszExe, ".exe", ARRAYSIZE(szFullExe), szFullExe, &pszFileExe)) {
 | |
|         pszExe = "size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe";
 | |
|         SearchPathA(NULL, pszExe, ".exe", ARRAYSIZE(szFullExe), szFullExe, &pszFileExe);
 | |
|     }
 | |
| 
 | |
|     StringCchPrintfA(szCommand, sizeof(szCommand), "%s %d", pszExe, repeats - 1);
 | |
| 
 | |
|     printf("size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe:"
 | |
|            " [%s]\n", szCommand);
 | |
|     fflush(stdout);
 | |
| 
 | |
|     SetLastError(0);
 | |
|     if (!CreateProcessA(szFullExe[0] ? szFullExe : NULL, szCommand,
 | |
|                         NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) {
 | |
|         DWORD dwError = GetLastError();
 | |
|         printf("size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe:"
 | |
|                " CreateProcess failed: %ld\n", dwError);
 | |
|         return 1;
 | |
|     }
 | |
| 
 | |
|     WaitForSingleObject(pi.hProcess, INFINITE);
 | |
| 
 | |
|     DWORD dwResult = 0;
 | |
|     if (!GetExitCodeProcess(pi.hProcess, &dwResult)) {
 | |
|         printf("size" DETOURS_STRINGIFY(DETOURS_BITS) ".exe:"
 | |
|                " GetExitCodeProcess failed: %ld\n", GetLastError());
 | |
|         return 9010;
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| //
 | |
| ///////////////////////////////////////////////////////////////// End of File.
 |