Доброго времени суток. Вот столкнулся с такой проблеммой Код (Text): bytesIO := 13; NtAllocateVirtualMemory ( H, @InjData.AdrLibName, 0, @bytesIO, MEM_COMMIT or MEM_RESERVE or MEM_TOP_DOWN, PAGE_EXECUTE_READWRITE ); MemPointer := @Buf[0]; // buf => array [0..n] of Char; // При вызове этой ф-и GetLastError = 2 ( ERROR_FILE_NOT_FOUND ) // но bytesWritten = 13 WriteProcessMemory ( H, InjData.AdrLibName, @Buf[0], 13, bytesWritten ); // Если вместо WriteProcessMemory вызвать эту ф-ю то возращается ошибка STATUS_SEGMENT_NOTIFICATION NtWriteVirtualMemory ( H, @InjData.AdrLibName, @MemPointer, 13, @BytesIO ); В чем может быть дело?
Убери в последней строке @ перед InjData.AdrLibName и MemPointer А также 1) перед вызовом NtAllocateVirtualMemory нужно установить InjData.AdrLibName:=Nil; 2) нужно проверять результаты вызова функций на STATUS_SUCCESS или true и смотреть код ошибки GetLastError, только в случае неуспешного выполнения
Ах да, точно... Ошибся когда переводил. Пора мне завязывать по ночам сидеть. Я просто подрезал код чтобы было легче понять. Выделение памяти проходит вполне успешно и система сама выбирает свободный адрес ( InjData.AdrLibName = Nil ) . Ок, буду иметь ввиду Зы. Огромное спасибо