Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для xxXAKEPxx
2 / 2 / 2
Регистрация: 30.01.2013
Сообщений: 150
1

Управление памятью другой программы

25.10.2015, 21:19. Показов 1151. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Необходим постоянно устанавливать значение переменной в другой запущенной программе в 0.
Ну это понятно, что значение надо менять в цикле, с задержкой ( Sleep(int) ).
Суть не в этом.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int speed;
    HWND hWin;
    DWORD ProcId;
    HANDLE hProc;
    DWORD NBW;
    int Adress;
    DWORD readwrite;
    
    hWin = FindWindow(NULL, "Program");
    cout << "hWin: " << hWin << endl;
    
    if (hWin = 0)
    {   return -1;
     } 
    
    speed = 666;
    
    DWORD f=4;
    GetWindowThreadProcessId(hWin, &ProcId);
    cout << "ProcId: " << ProcId << endl;  //ЗДЕСЬ ВСЕГДА ВЫВОДИТ 30, а в диспетчере задач ИД процесса 18860
    hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcId);
    cout << "hProc Error: " << GetLastError() << endl; //ЗДЕСЬ ВЫВОДИТ 87
    cout << "hProc: " << hProc << endl; //А ЗДЕСЬ ВЫВОДИТ 0
    DWORD start=0x0E480144; //адрес указателя на адрес переменной
    ReadProcessMemory(hProc, (LPVOID)start, &Adress, f, 0);
    cout << "Adress: " << Adress << endl;
    Adress = Adress + 78;
    cout << "Adress: " << Adress << endl;
    
    WriteProcessMemory(hProc, (LPVOID)Adress, (LPVOID)&speed, f, 0);
    CloseHandle(hProc);
 
    system("PAUSE");
    return EXIT_SUCCESS;
Что я не так делаю?
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2015, 21:19
Ответы с готовыми решениями:

Реализовать алгоритм работы планировщика. Управление виртуальной памятью. Управление файловой системой
Разработка программы менеджера памяти. Свопинг. Сегментная схема организации памяти. Управление...

Управление другой программой: после открытия программы, в дальнейшем Handle теряется
Если прога изначально работает, а потом мы ищем ее с помощью FindWindow, тогда handle есть. почему...

Управление памятью для массивов
Наверное я был не туда написал или что... Помогите кто может,надо написать прогу Управление...

Управление другой программой!!
Доброго времени суток. Такая проблемка--&gt; Нужно сделать програмку, а точнее диск с автомотической...

5
Неэпический
 Аватар для Croessmah
18116 / 10702 / 2063
Регистрация: 27.09.2012
Сообщений: 26,958
Записей в блоге: 1
25.10.2015, 21:48 2
C++
1
if (hWin = 0)
"=" - присваивание
"==" - сравнение
0
 Аватар для xxXAKEPxx
2 / 2 / 2
Регистрация: 30.01.2013
Сообщений: 150
25.10.2015, 22:17  [ТС] 3
О. Какая глупая ошибка, досадно.
Просто с Pascal'я переносил, вот и получилось так.

Добавлено через 21 минуту
Однако, теперь при "ProcId: 18860", все равно "hProc: 0" и "hProc Error: 5".
Я нашёл, что значит этот код:
"ERROR_ACCESS_DENIED
5 (0x5)
Access is denied." (Доступ запрещён)
Возникает вопрос почему??? Это не системный процесс и есть все права администратора!
0
59 / 54 / 2
Регистрация: 04.12.2014
Сообщений: 142
25.10.2015, 23:14 4
хм, а почему GetWindowThreadProcessId? Она же вроде возвращает id потока, породившего окно?
в Вашем случае по-моему было бы правильнее использовать GetProcessId
0
 Аватар для xxXAKEPxx
2 / 2 / 2
Регистрация: 30.01.2013
Сообщений: 150
26.10.2015, 10:45  [ТС] 5
GetProcessId() возвращает Id процесса на основе его хэндела, а мне нужно как раз получить хэндл.

Добавлено через 37 минут
Нашёл ответ на другом форуме:
"Ошибка 5 означает что всё ок, только закрыт доступ, я нашел решение первого вопроса через добавления флага доступа пользователю SE_DEBUG_NAME, кода побольше но зато работает, хочу заметить что этот флаг включен по умолчанию в винде, просто мою винду поимели пару вирусов =(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
HANDLE NEW_OpenProcess(DWORD dwProcessId)
{
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
        
        if (hProcess == NULL)
        {
            TOKEN_PRIVILEGES Priv, PrivOld;
            DWORD cbPriv = sizeof(PrivOld);
            HANDLE hToken;
 
            // получаем токен текущего потока
            if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, FALSE, &hToken))
            {
                // используем токен процесса, если потоку не назначено
                // никакого токена
                OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken);
            }
 
            Priv.PrivilegeCount = 1;
            Priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Priv.Privileges[0].Luid);
 
            // попробуем включить привилегию
            AdjustTokenPrivileges(hToken, FALSE, &Priv, sizeof(Priv), &PrivOld, &cbPriv);
    
            // попробуем открыть описатель процесса еще раз
            hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
        
            // восстанавливаем исходное состояние привилегии
            AdjustTokenPrivileges(hToken, FALSE, &PrivOld, sizeof(PrivOld), NULL, NULL);
            CloseHandle(hToken);
        }
 
        return hProcess;
}
"
И далее в моём коде, вместо OpenProcess() вызываем NEW_OpenProcess().
0
59 / 54 / 2
Регистрация: 04.12.2014
Сообщений: 142
26.10.2015, 11:22 6
для 32-битного процесса PID и хэндл можно выковырять еще вот таким образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
 
using namespace std;
 
int main()
{
    HANDLE hProc = NULL;
    PROCESSENTRY32 pe = { 0 };
    pe.dwSize = sizeof(PROCESSENTRY32);
 
 
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (Process32First(snap, &pe) == TRUE)
    {
        while (Process32Next(snap, &pe) == TRUE)
        {
            if (_wcsicmp(pe.szExeFile, TEXT("notepad.exe")) == 0)
            {
                hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
// хэндл получен, можно куралесить
                cout << GetProcessId(hProc) << endl;
                            
                CloseHandle(hProc);
            }
        }
    }
 
    CloseHandle(snap);
 
    return 0;
}
на 64-разрядном процессе нет возможности протестить, но судя по описанию CreateToolhelp32Snapshot на мсдн (да и по ее названию ) нифига не получится.
0
26.10.2015, 11:22
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2015, 11:22
Помогаю со студенческими работами здесь

Управление другой программой
Есть сторонняя программа, в окне которой размещены различные элементы, которыми нужно управлять....

Управление другой программой через интерфейс пользователя
В общем есть проблема, а именно огромное время, кот тратится на одну онлайн игру, соотв хотелось бы...

Управление объектом динамического массива с другой формы
Есть форма на которой массив изображений. Обращаюсь к объекту с помощью : TImage *kran =...

Управление объектом динамического массива с другой формы (this)
По нажатию кнопки на форме 2 , объект TImage на форме 1 должен поменять изображение. Создание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru