@algotrader2013

Почему нельзя вызывать ReadProcessMemory в бесконечном цикле?

На C# написал программку, которая сначала один раз определяет указатель на процес
pname = ProcName.Replace(".exe", "");
Process[] proclist = Process.GetProcesses();
foreach (Process pr in proclist)
{

if (pr.ToString() == "System.Diagnostics.Process (" + pname + ")")
{
hand = pr.Handle;
}
}

после чего идет бесконечная вычитка по известному адресу памяти (адрес взят из CheatEngine)
ReadProcessMemory(hand, (IntPtr)Address, ret, (UInt32)ret.Length, ref o);
Thread.Sleep(1);

Все запускается и работает, но недолго, где-то через минуту начинает возвращать нули. Если повторить определение указателя на процесс и перезапустить поток с бесконечным циклом, то снова работает пару минут.

Прошу подсказать, в каком направлении двигаться
  • Вопрос задан
  • 4071 просмотр
Решения вопроса 1
@algotrader2013 Автор вопроса
Вопрос решился. Надо было каждый раз обновлять hand = pr.Handle;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Прошу подсказать, в каком направлении двигаться

Посмотреть на результат возвращаемый ReadProcessMemory, если там false -- то на GetLastError.
Ответ написан
Комментировать
AxisPod
@AxisPod
Ну стоит понять как ведется работа с памятью. К примеру сборщик мусор .NET при сборке проводит дефрагментацию для малых объектов и через некоторое время данные по известному адресу пропадут. Другие сборщики мусора могут поступать аналогично. Может быть защита и т.д. Так что проблема тут скорее всего в приложении из которого вы и читаете данные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы