Advertisement
vovan333

MemoryManager.cpp

Jun 4th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define IoRequestCode(code)     CTL_CODE(FILE_DEVICE_UNKNOWN, code, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2. #define ReadRequestCode         IoRequestCode(0x0701)
  3. #define WriteRequestCode        IoRequestCode(0x0702)
  4. using ulong = unsigned long;
  5.  
  6. enum ResponseStatus
  7. {
  8.     BadProcessId = 0xDEADBEEF
  9. };
  10.  
  11. class ReadRequest
  12. {
  13.     public:
  14.     ReadRequest(ulong pid, ulong addr, ulong sz) : Pid(pid), Addr(addr), Sz(sz) {};
  15.     ulong Pid, Addr, Sz;
  16.     void* Response;
  17. };
  18.  
  19. class WriteRequest
  20. {
  21.     public:
  22.     WriteRequest(ulong pid, ulong addr, void* data, ulong sz) : Pid(pid), Addr(addr), Data(data), Sz(sz) {};
  23.     ulong Pid, Addr, Sz;
  24.     void* Data;
  25. };
  26.  
  27. class MemoryManager
  28. {
  29.     public:
  30.  
  31.     HANDLE hDriver;
  32.     MemoryManager()
  33.     {
  34.         hDriver = CreateFileA("\\\\.\\MmDrv", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  35.     }
  36.  
  37.     template <class T> T Read(ulong pid, ulong address)
  38.     {
  39.         ReadRequest request(pid, address, sizeof(T));
  40.         T buffer;
  41.         request.Response = &buffer;
  42.         DeviceIoControl(hDriver, ReadRequestCode, &request, sizeof(request), &request, sizeof(request), 0, 0);
  43.         return *((T*)request.Response);
  44.     }
  45.  
  46.     template <class T> void Write(ulong pid, ulong address, T data)
  47.     {
  48.         WriteRequest request(pid, address, &data, sizeof(T));
  49.         DeviceIoControl(hDriver, WriteRequestCode, &request, sizeof(request), &request, sizeof(request), 0, 0);
  50.     }
  51. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement