2016-12-07 2 views
3

Мне нужна помощь, я кодирую dll, которые изменяют некоторые значения из приложения. но если я затормозил падение стоимости приложения (перестаньте работать через некоторое время).Thread с WriteProcessMemory

Это мой код: Здесь я создать поток, который обновляет адрес:

CreateThread(nil, 0, @UpdateAddr, Pointer(nil), 0, rodaid) 

и здесь есть функция UpdateAddr:

procedure UpdateAddr; 
var 
    BytesWrite: DWORD; 
    buf: Cardinal; 
begin 
    while true do 
    begin 
    buf := Random(38); 
    WriteProcessMemory(ProcessH, SpeedAddr, addr(buf), sizeof(buf), BytesWrite); 
    end; 
end; 

А вот как я открыть процесс:

ProcessH := OpenProcess (PROCESS_ALL_ACCESS, False, ProcessId);

По какой-либо причине, кто не знает об авариях приложений после некоторого времени создания потока.

Кто-нибудь может мне помочь?

ответ

3

Несколько проблем, которые я вижу. В том числе:

  1. Проверка ошибок не производится.
  2. Запрашиваю PROCESS_ALL_ACCESS, что больше вас интересует.
  3. Процедура потока имеет неправильную подпись.

Последний из них объясняет крах в вашем приложении, но не в другом приложении. Процедура нити должна быть:

function ThreadProc(lpParameter: Pointer): DWORD; stdcall; 

Скорее всего, другое приложение рушится, потому что вы зажимаете его памятью. Попробуйте удалить вызов WriteProcessMemory и посмотреть, не прекратится ли другое приложение.

+0

Кто из других приложений, а не мое приложение, что я должен использовать на OpenProcess вместо PROCESS_ALL_ACCESS? –

+0

Прочитайте документы для WriteProcessMemory. Ответ есть. Что касается того, почему другое приложение резко падает, потому что вы зажимаете его за спиной. Обратитесь за помощью к разработчику приложения. –

+0

Другое приложение - одна игра, и если я замораживаю один и тот же адрес с чит-движком, как игра-пазл, не сработайте. –

Смежные вопросы