Ошибка 299 при вызове функции ReadProcessMemory возникает из-за неверного адреса, переданного в качестве параметра. Это может быть вызвано неправильным указанием адреса памяти для чтения или неверными правами доступа к памяти.
Для улучшения доступа к значению из процесса с использованием функции ReadProcessMemory и указателя на модуль с сдвигом 0x17361E8, можно выполнить следующие шаги:
1. Получить дескриптор процесса с помощью функции OpenProcess.
2. Получить базовый адрес модуля, используя функцию GetModuleHandle.
3. Вычислить адрес памяти, на который указывает указатель с учетом сдвига 0x17361E8.
4. Использовать функцию ReadProcessMemory для чтения значения по вычисленному адресу памяти.
Пример кода на C++:
```cpp
#include <windows.h>
#include <iostream>
int main() {
DWORD pid = 0; // ID процесса
uintptr_t module = 0; // указатель на модуль
uintptr_t offset = 0x17361E8; // сдвиг
// Получаем дескриптор процесса
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (hProcess == NULL) {
std::cout << "Failed to open process" << std::endl;
return 1;
}
// Получаем базовый адрес модуля
HMODULE hModule = GetModuleHandle(NULL);
uintptr_t baseAddress = (uintptr_t)hModule;
// Вычисляем адрес с учетом сдвига
uintptr_t address = baseAddress + offset;
// Читаем значение из памяти
int value;
ReadProcessMemory(hProcess, (LPCVOID)address, &value, sizeof(value), NULL);
std::cout << "Value: " << value << std::endl;
// Закрываем дескриптор процесса
CloseHandle(hProcess);
return 0;
}
```
Пожалуйста, убедитесь, что у вас есть права доступа к целевому процессу и что указанный сдвиг и адрес модуля корректны.