Guest User

MemManagement.h

a guest
May 23rd, 2010
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. /*
  2.     Made by SwallowIt at Cheat Engine Forums
  3. */
  4. #include <windows.h>
  5. #include <Psapi.h>
  6. #include <tchar.h>
  7.  
  8. #pragma comment(lib, "Psapi")
  9.  
  10. struct jProc
  11. {
  12.     HANDLE hProcess;
  13.     DWORD PID;
  14. };
  15.  
  16. struct jPointer
  17. {
  18.     DWORD Address;
  19.     DWORD Offset;
  20. };
  21.  
  22. jProc findProcess(TCHAR* processName)
  23. {
  24.     DWORD i;
  25.     jProc r = {0,0};
  26.    
  27.     DWORD ProcessesIDs[50], cbNeeded, cProcesses = NULL;
  28.     TCHAR szProcessName[50] = TEXT("<unknown>");
  29.    
  30.     if(!EnumProcesses( ProcessesIDs, sizeof(ProcessesIDs), &cbNeeded ))
  31.     {
  32.         r.hProcess = NULL;
  33.         r.PID = NULL;
  34.         return r;
  35.     }
  36.    
  37.     cProcesses = cbNeeded / sizeof(DWORD);
  38.    
  39.     for ( i = 0; i < cProcesses; i++ )
  40.     {
  41.         r.hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, ProcessesIDs[i] );
  42.        
  43.         if (NULL != r.hProcess )
  44.         {
  45.             GetModuleBaseName( r.hProcess, NULL, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
  46.         }
  47.        
  48.         if (strcmp(szProcessName,processName) == 0)
  49.         {
  50.             r.PID = ProcessesIDs[i];
  51.             return r;
  52.         }
  53.        
  54.         CloseHandle( r.hProcess );
  55.         r.hProcess = NULL;
  56.     }
  57.    
  58.     return r;
  59. }
  60.  
  61. /* Process, Address to read, # of bytes to read */
  62. DWORD readMemory(jProc Process, DWORD Address, DWORD NBR)
  63. {
  64.     DWORD Buffer = 0;
  65.     ReadProcessMemory(Process.hProcess,(LPCVOID)Address,&Buffer,NBR,0);
  66.     return Buffer;
  67. }
  68.  
  69. /* Process, Address to write, Buffer to write */
  70. boolean writeMemory(jProc Process, DWORD Address, LPVOID Buffer)
  71. {
  72.     return WriteProcessMemory(Process.hProcess,(LPVOID)Address, &Buffer, sizeof(Buffer),0);
  73. }
  74.  
  75. /* Process, Pointer to address, # of bytes to read */
  76. DWORD readPointer(jProc Process, jPointer Pointer, DWORD NBR)
  77. {
  78.     DWORD Pointed = 0;
  79.     Pointed = readMemory(Process,Pointer.Address,NBR) + Pointer.Offset;
  80.     return readMemory(Process,Pointed,NBR);
  81. }
  82.  
  83. /* Process, Pointer to address, Buffer to write */
  84. boolean writePointer(jProc Process, jPointer Pointer, LPVOID Buffer)
  85. {
  86.     DWORD Pointed = readMemory(Process,Pointer.Address,4) + Pointer.Offset;
  87.     return writeMemory(Process,Pointed,Buffer);
  88. }
Advertisement
Add Comment
Please, Sign In to add comment