Форум программистов, компьютерный форум CyberForum.ru

Остановить процесс загрузки файла в память на конкретном адресе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество http://www.cyberforum.ru/cpp-beginners/thread1062521.html
Дана строка вида «Фамилия Имя Отчество». Получить строку вида Имя Отчество
C++ Ввод переменной независящий от работы программы Задача такая, нужно, что бы переменная вводилась в любое время работы программы и совершала некие действия(вывод чего-нибудь, к примеру), то есть, что бы ввод этой перменной никак не влиял на работу программы, что бы ее ввод был независим от работы программы. Заранее благодарен. Добавлено через 10 минут Помогите кто-нибудь неучу... :C http://www.cyberforum.ru/cpp-beginners/thread1062517.html
Определить функцию вычисления площади треугольника по трем его сторонами, заданными действительными числами C++
Условие: Даны действительные числа a, b, c, d. Найти площадь шестиугольника, изображенного на рис. 4.1. Определить функцию вычисления площади треугольника по трем его сторонами, заданными действительными числами. Если эти числа не позволяют по- строить треугольник, то результатом работы функции должно быть значение -1. Рисунок прикреплен. Решение: И так все сделал, нашел площади...
Заменить в заданной символьной строке все слова, содержащие указанную букву на соответствующее количество символов '*' C++
Написать функцию, которая заменяет в заданном символьном строке все слова, содержащие указанную букву на соответствующее количество символов '*'.
C++ Рекурсивная функция поиска минимального элемента матрицы http://www.cyberforum.ru/cpp-beginners/thread1062497.html
Найти наименьший элемент каждой строки в заданном двумерном массиве, используя рекурсивную функцию. Заранее всем спасибо.
C++ Дано целое число i, 1 <= i <= 8. Вывести на экран i строку последовательности строк Дано целое число i, 1 <= i <= 8. Вывести на экран i-ю строку последовательности строк 1 a 2 aab 3 aabaabc 4 aabaabcaabaabc подробнее

Показать сообщение отдельно
_lunar_
Graphics API Developer
1197 / 1123 / 76
Регистрация: 03.05.2011
Сообщений: 2,741
04.01.2014, 21:22  [ТС]     Остановить процесс загрузки файла в память на конкретном адресе
Цитата Сообщение от Tulosba Посмотреть сообщение
_lunar_, по-моему, Вам надо в другую тему переместиться. Например сюда http://www.cyberforum.ru/directx/
да в том то и дело, что основной вопрос вроде как не по directx.
я тут набросал небольшую программку с CREATE_SUSPENDED (не особо красиво, но вроде работает)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
typedef LONG(NTAPI *_NtResumeProcess)(IN HANDLE ProcessHandle);
 
PROCESS_INFORMATION StartProcess(TCHAR *AppName, TCHAR *CmdLine)
{
    cout << "AppName: " << AppName;
    PROCESS_INFORMATION procInfo;
    STARTUPINFO startInfo;
    memset(&procInfo, 0, sizeof(procInfo));
    memset(&startInfo, 0, sizeof(startInfo));
    startInfo.cb = sizeof(startInfo);
 
    BOOL result;
    TCHAR tempCmdLine[MAX_PATH];
    if (CmdLine != NULL)
    {
        ua_tcscpy_s(tempCmdLine, MAX_PATH, CmdLine);
        result = CreateProcess(AppName, tempCmdLine, NULL, NULL, FALSE,
            CREATE_SUSPENDED, NULL, NULL, &startInfo, &procInfo);
    }
    else
    {
        result = CreateProcess(AppName, CmdLine, NULL, NULL, FALSE,
            CREATE_SUSPENDED, NULL, NULL, &startInfo, &procInfo);
    }
 
    return procInfo;
}
 
int main()
{
    PROCESS_INFORMATION procInfo = StartProcess("file.exe", NULL);
    cout << "\n\nProcess is SUSPENDED.\nPress F1 for resume process.";
    while (1)
    {
        if (GetAsyncKeyState(VK_F1))
        {
            _NtResumeProcess NtResumeProcess_ = (_NtResumeProcess)GetProcAddress(
                GetModuleHandle("ntdll.dll"), "NtResumeProcess");
            NtResumeProcess_(procInfo.hProcess);
        }
        Sleep(100);
    }
    return 0;
}
при запуске процесс находится в фоновых, но открывая каким-нить memory viewer'ом обнаруживаю, что там даже не загружена таблица PE (всё по нулям), не говоря уже о требуемой функции. Вот хорошо бы загрузиться до требуемого адреса, а там уже инжектнуть хук

Добавлено через 18 часов 19 минут
товарищи, дайте какую-нибудь идею.

Добавлено через 5 часов 13 минут
вроде как решил проблему, используя SuspendThread, дав основному процессу немного времени загрузиться в память и снова остановиться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROCESS_INFORMATION procInfo = StartProcess("file.exe", NULL)
while (1)
{
    if (GetAsyncKeyState(VK_F1))
    {
        _NtResumeProcess NtResumeProcess_ = (_NtResumeProcess)GetProcAddress(
                GetModuleHandle("ntdll.dll"), "NtResumeProcess");
            NtResumeProcess_(procInfo.hProcess);
        Sleep(3000);
        SuspendThread(procInfo.hThread);
    }
 
    if (GetAsyncKeyState(VK_F2))
    {
        ResumeThread(procInfo.hThread);
    }
}
 
Текущее время: 23:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru