Czy ta klasa może być przydatna?

0

Służy do manipulowania pamięcią procesu. Metoda open wybiera okno z odpowiednią nazwą, read służy do odczytu wartości z danego adresu a write zapisuje daną wartość pod dany adres. Ta klasa z założenia ma oferować dużo łatwiejsze i bezpieczniejsze manipulowanie pamięcią procesu niż używanie gołego WinApi. Choć z drugiej strony nie jestem pewien czy to nie jest przerost formy nad treścią. Zapraszam do oceny.

#include <windows.h>
class OneProcess
{
private:
    DWORD process_id;
    HANDLE handle;
    HWND hwnd;
public:
    template<typename type>
    type Read(DWORD address)
    {
        if(hwnd)
        {
            type value_to_return;
            ReadProcessMemory(handle, (LPVOID)address, &value_to_return,sizeof(type),0);
            return value_to_return;
        }
    }
    template<typename type>
    void Write(DWORD address, type value_to_write)
    {
        WriteProcessMemory(handle, (LPVOID)address, &value_to_write,sizeof(type),0);
    }
    void Open(char window_name[])
    {
        hwnd=FindWindow(NULL, window_name);
        if(hwnd)
        {
            GetWindowThreadProcessId(hwnd,&process_id);
            handle=OpenProcess(PROCESS_ALL_ACCESS, false, process_id);
        }
    }
    void Close()
    {
        CloseHandle(handle);
    }
    OneProcess(char window_name[])
    {
        Open(window_name);
    }
    OneProcess(){}
    ~OneProcess()
    {
        Close();
    }
};
2

Rule of three.

Brakuje operatora i konstruktora kopiującego. Można zrobić na kilka sposobów:

  1. zabronić kopiowania po nowemu = delete
  2. zabronić kopiowania po staremu (private:)
  3. zaimplementować właściwe kopiowanie za pomocą DuplicateHandle.
    template<typename type>
    void Write(DWORD address, type value_to_write)

Nie podoba mi się to przekazywanie potencjalnie wielkiego bufora przez wartość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1