Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define IoRequestCode(code) CTL_CODE(FILE_DEVICE_UNKNOWN, code, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
- #define ReadRequestCode IoRequestCode(0x0701)
- #define WriteRequestCode IoRequestCode(0x0702)
- using ulong = unsigned long;
- enum ResponseStatus
- {
- BadProcessId = 0xDEADBEEF
- };
- class ReadRequest
- {
- public:
- ReadRequest(ulong pid, ulong addr, ulong sz) : Pid(pid), Addr(addr), Sz(sz) {};
- ulong Pid, Addr, Sz;
- void* Response;
- };
- class WriteRequest
- {
- public:
- WriteRequest(ulong pid, ulong addr, void* data, ulong sz) : Pid(pid), Addr(addr), Data(data), Sz(sz) {};
- ulong Pid, Addr, Sz;
- void* Data;
- };
- class MemoryManager
- {
- public:
- HANDLE hDriver;
- MemoryManager()
- {
- hDriver = CreateFileA("\\\\.\\MmDrv", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
- }
- template <class T> T Read(ulong pid, ulong address)
- {
- ReadRequest request(pid, address, sizeof(T));
- T buffer;
- request.Response = &buffer;
- DeviceIoControl(hDriver, ReadRequestCode, &request, sizeof(request), &request, sizeof(request), 0, 0);
- return *((T*)request.Response);
- }
- template <class T> void Write(ulong pid, ulong address, T data)
- {
- WriteRequest request(pid, address, &data, sizeof(T));
- DeviceIoControl(hDriver, WriteRequestCode, &request, sizeof(request), &request, sizeof(request), 0, 0);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement