Форум программистов, компьютерный форум, киберфорум
demmax2004
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Получения имени чужого процесса по его PID в 32-х разрядных приложениях

Запись от demmax2004 размещена 08.02.2015 в 07:07

Данный способ позволяет получить имя чужого процесса с его полным путем по его PID.
и самое важное
Данный способ позволяет получить имя чужого процесса (x64) с его полным путем по его PID в 32-х разрядных приложениях которые запускаются в 64-х разрядных Windows.


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
wchar_t * GetFullNameByPID(DWORD processID)
{
    typedef DWORD (WINAPI *DLL_FUNC_QUERYFULLPPROCESSIMAGENAME)(HANDLE, DWORD, LPTSTR, PDWORD);
    DLL_FUNC_QUERYFULLPPROCESSIMAGENAME     DLL_QueryFullProcessImageName;
    HMODULE hDLL;
    HANDLE hToken;
    HANDLE hProcess;
    wchar_t module_name[MAX_PATH];
    DWORD dwSize = MAX_PATH - 1;
 
    hDLL = LoadLibrary(L"Kernel32.dll");
 
    if(!hDLL) return NULL;
 
    DLL_QueryFullProcessImageName = (DLL_FUNC_QUERYFULLPPROCESSIMAGENAME)GetProcAddress(hDLL, "QueryFullProcessImageNameW");
    if(!DLL_QueryFullProcessImageName) return 0;
 
 
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
    if(!SetPrivilege(hToken, L"SeDebugPrivilege", TRUE)) return NULL;
 
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
    if(NULL == hProcess) return NULL;
 
    DLL_QueryFullProcessImageName(hProcess, 0, module_name, &dwSize);
 
    CloseHandle(hProcess);
    SetPrivilege(hToken, L"SeDebugPrivilege", FALSE);
 
    return module_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
36
37
38
BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    )
{
    TOKEN_PRIVILEGES tp;
    LUID luid;
 
    if ( !LookupPrivilegeValue(
            NULL,            // lookup privilege on local system
            lpszPrivilege,   // privilege to lookup
            &luid ) )        // receives LUID of privilege
    {
        return FALSE;
    }
 
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;
 
    // Enable the privilege or disable all privileges.
 
    if(!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES)NULL, (PDWORD) NULL))
    {
          return FALSE;
    }
 
    if(GetLastError() == ERROR_NOT_ALL_ASSIGNED)
    {
          return FALSE;
    }
 
    return TRUE;
}
Размещено в Без категории
Просмотров 680 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.