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

Доступ к процессам на Windows 6.x - C++

Восстановить пароль Регистрация
 
_lunar_
Graphics API Developer
1197 / 1123 / 76
Регистрация: 03.05.2011
Сообщений: 2,741
03.11.2013, 20:15     Доступ к процессам на Windows 6.x #1
есть простой код получения handle процесса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <Windows.h>
 
int main()
{
    HWND hWnd = FindWindow(NULL, "limbo");
    DWORD pID;
    GetWindowThreadProcessId(hWnd, &pID);
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
    printf("pID %d\nHandle %d", pID, hProc);
    getchar();
    return 0;
}
который естественно не сработал
почитав форум, погуглив и покопавшись на MSDN понял, что начиная с Windows Vista (версия ОС 6.х) процессы имеют защиту. И не PROCESS_ALL_ACCESS и не на порядок ниже (как рекомендует MSDN) PROCESS_VM_READ не работают, при отладке handle выводит
Код
unused <Чтение памяти невозможно>
и всё бы ничего, если бы ни одно НО!
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
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
class Program
{
    public static int pID;
 
    [DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcess(int dwDesiredAccess,
        bool bInheritHandle, int dwProcessId);
    public static void GetProcess(string Name)
    {
        Process[] proc = Process.GetProcesses();
        foreach (Process process in proc)
            if (process.ProcessName == Name)
            {
                pID = process.Id;
                return;
            }
        return;
    }
    static void Main()
    {
        GetProcess("limbo");
        IntPtr handle = OpenProcess(0x001F0FFF, false, pID);
        Console.WriteLine("pID {0}\nHandle {1}", pID, handle);
        Console.ReadKey();
    }
}
на шарпе (НА ШАРПЕ!!!) я спокойно получаю handle нужного мне процесса той же функцией OpenProcess с теми же правами полного доступа. Как это объяснить?
для разработки приложения мне необходимо использовать C++ (C# не вариант). Есть ли какой-то способ получения handle процесса на плюсах без "танцев"?, типа режима debug, который тоже не сработал.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 20:15     Доступ к процессам на Windows 6.x
Посмотрите здесь:

Стек и произвольный доступ C++
C++ Путь к процессам
C++ Программировани Shell для Windows (замена Windows Explorer)
Доступ к реестру на С++ C++
Доступ к переменным C++
Что выбирать для дальнейшего изучения Windows 7 c Win32 или Windows 8 c WinRt? C++
Переслать вектор N процессам, используя различные виды связи между процессами (MPI_Alltoall) C++
C++ Подключение к процессам

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

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

Текущее время: 15:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru