Настройка привязки процесса к определенному процессу - PullRequest
0 голосов
/ 02 июля 2019

Я хочу установить привязку процесса к определенному процессу.

Как: У меня есть процесс под названием "word.exe" с PID: 2045 Как я могу установить привязку процесса к нему?

Я искал в Интернете, и я не нашел много. Я нашел только GetCurrentProcess (), но он устанавливает привязку процесса только к текущему процессу.

int main()
{   

    DWORD processID = GetCurrentProcessId();
    HANDLE process = GetCurrentProcess();
    DWORD_PTR processAffinityMask = 1;

    BOOL success = SetProcessAffinityMask(process, processAffinityMask);
    SetPriorityClass(GetCurrentProcess(), THREAD_PRIORITY_TIME_CRITICAL);

    cout << success << " " << processID << endl; //returns 1 if everything goes okay
}

EDIT Я имел в виду: есть замена GetCurrentProcess (), которая вместо установки привязки к текущему процессу устанавливает привязку к конкретному процессу, который я хочу?

1 Ответ

1 голос
/ 03 июля 2019

я могу изменить GetCurrentProcces () с другой функцией? Да.

#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
HANDLE GetProcessHandleByName(const std::wstring& processName)
{
    HANDLE hProcess = NULL;
    PROCESSENTRY32 processInfo;
    processInfo.dwSize = sizeof(processInfo);

    HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (processesSnapshot == INVALID_HANDLE_VALUE) {
        return 0;
    }

    Process32First(processesSnapshot, &processInfo);
    if (!processName.compare(processInfo.szExeFile))
    {
        CloseHandle(processesSnapshot);
        hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processInfo.th32ProcessID);
        return hProcess;
    }

    while (Process32Next(processesSnapshot, &processInfo))
    {
        if (!processName.compare(processInfo.szExeFile))
        {
            CloseHandle(processesSnapshot);
            hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processInfo.th32ProcessID);
            return hProcess;
        }
    }

    CloseHandle(processesSnapshot);
    return hProcess;
}

Использование:

HANDLE hProcess = GetProcessHandleByName(L"word.exe");

КСТАТИ: В SetPriorityClass, нет параметра THREAD_PRIORITY_TIME_CRITICAL в dwPriorityClass, возможно, вы хотите использовать SetThreadPriority.

...