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

Получение командой строки для процесса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ вложенный класс http://www.cyberforum.ru/cpp-beginners/thread932359.html
Какие проблемы могут возникнуть в следующем объявлении вложенного класса? class Ribs { private: class Sauce { int soy; int sugar; public : Sauce (int s1, int s2) : soy ( s1 ), sugar ( s2 ) ( )
C++ Произвести действия со строкой матрицы Добрый день. Обращаюсь за помощью, т. к не знаю как правильно сделать в следующем случае: int a= {9,7,3,6,8,0,5,4,1, 2,4,8,3,0,1,6,0,7, 0,0,1,4,9,7,0,0,0, 1,8,0,2,6,3,0,0,0, 4,9,2,0,0,0,3,6,5, http://www.cyberforum.ru/cpp-beginners/thread932354.html
C++ Сортировка std::list
Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все правильно. В класе перегружены оператори < i =. Не знаю что делать. List просто не сортируеться а ввыводиться в изначальном виде. Может есть еще какие то методи отсортировать??? void sortL(L &v){ int k=v.size(); Student temp,a,b; L::iterator z = v.begin(); for (int i = 0; i < k; i++) for (int j = i + 1; j...
работа с битами C++
доброй ночи, форумчане, необходима ваша помощь) как и всем тут... вот изучаю с++ и добрался до работы с битами, учу решением задач. на форуме, правда не на этом, нашёл несколько задач: 1. Посчитать сколько нулей в числе с третьего по 13 бит, включая эти биты. 2. Инвертировать все биты с 2 по 14 включая эти биты. 3. Определить на сколько в числе А больше значущих битов, что равны единице, чем...
C++ Как избавиться от остановки программы из-за функции recv()? http://www.cyberforum.ru/cpp-beginners/thread932332.html
Я пишу чат на WinSock. Суть его проста - существует цикл, в котором идет такая последовательность действий: 1. Если нажат Enter, то отправляем данные send() 2. Прием данных recv() 3. Анализирование и вывод принятых данных Все работает правильно, данные анализируются и отправляются без ошибок... Но есть одна проблема: Как только цикл доходит до функции приема данных recv(), то он...
C++ Онлайн-курсы,развод или хорошее обучение? Ребят,что скажите по поводу вот этих курсов?. Не развод ли? И научат ли чему стоящему? подробнее

Показать сообщение отдельно
myxasa
14 / 14 / 1
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2

Получение командой строки для процесса - C++

02.08.2013, 19:11. Просмотров 534. Ответов 0
Метки (Все метки)

Компилирую из под x86 всё здорово... запускаю на x64 - не может прочитать строку командную для процесса...
Для 64 бит компилировать мне не нужно... нужно как то сделать, чтобы работала, скомпилированная из под 32...
Что-то с readprocessmemory
Последний пост http://forum.sysinternals.com/readpr...opic24543.html
Хелп )
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <windows.h>
#include <stdio.h>
 
typedef NTSTATUS (NTAPI *_NtQueryInformationProcess)(
    HANDLE ProcessHandle,
    DWORD ProcessInformationClass,
    PVOID ProcessInformation,
    DWORD ProcessInformationLength,
    PDWORD ReturnLength
    );
 
typedef struct _UNICODE_STRING
{
    USHORT Length;
    USHORT MaximumLength;
    PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
 
typedef struct _PROCESS_BASIC_INFORMATION
{
    LONG ExitStatus;
    PVOID PebBaseAddress;
    ULONG_PTR AffinityMask;
    LONG BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR ParentProcessId;
} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
 
PVOID GetPebAddress(HANDLE ProcessHandle)
{
    _NtQueryInformationProcess NtQueryInformationProcess =
        (_NtQueryInformationProcess)GetProcAddress(
        GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");
    PROCESS_BASIC_INFORMATION pbi;
 
    NtQueryInformationProcess(ProcessHandle, 0, &pbi, sizeof(pbi), NULL);
 
    return pbi.PebBaseAddress;
}
 
int wmain(int argc, WCHAR *argv[])
{
    int pid;
    HANDLE processHandle;
    PVOID pebAddress;
    PVOID rtlUserProcParamsAddress;
    UNICODE_STRING commandLine;
    WCHAR *commandLineContents;
 
    DWORD pp;
 
    //HWND hWnd = FindWindow(NULL, L"Minecraft");
    GetWindowThreadProcessId(FindWindowW(0,L"Minecraft"), &pp);
 
    pid = pp;
   // pid = 4680;//_wtoi(argv[1]);
 
    if ((processHandle = OpenProcess(
        PROCESS_QUERY_INFORMATION | /* required for NtQueryInformationProcess */
        PROCESS_VM_READ, /* required for ReadProcessMemory */
        FALSE, pid)) == 0)
    {
        printf("Could not open process!\n");
        return GetLastError();
    }
 
    pebAddress = GetPebAddress(processHandle);
 
    /* get the address of ProcessParameters */
    if (!ReadProcessMemory(processHandle, (PCHAR)pebAddress + 0x10,
        &rtlUserProcParamsAddress, sizeof(PVOID), NULL))
    {
        printf("Could not read the address of ProcessParameters!\n");
        return GetLastError();
    }
 
    /* read the CommandLine UNICODE_STRING structure */
    if (!ReadProcessMemory(processHandle, (PCHAR)rtlUserProcParamsAddress + 0x40,
        &commandLine, sizeof(commandLine), NULL))
    {
        printf("Could not read CommandLine!\n");
        return GetLastError();
    }
 
    /* allocate memory to hold the command line */
    commandLineContents = (WCHAR *)malloc(commandLine.Length);
 
    /* read the command line */
    if (!ReadProcessMemory(processHandle, commandLine.Buffer,
        commandLineContents, commandLine.Length, NULL))
    {
        printf("Could not read the command line string!\n");
        return GetLastError();
    }
 
    /* print it */
    /* the length specifier is in characters, but commandLine.Length is in bytes */
    /* a WCHAR is 2 bytes */
    printf("%.*S\n", commandLine.Length / 2, commandLineContents);
    CloseHandle(processHandle);
    free(commandLineContents);
    system("pause");
    return 0;
}
Добавлено через 9 часов 42 минуты
Вот решение ReadProcessMemory из x86 для х64
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru