Как я могу получить дескриптор процесса его именем в C++?

Попробуйте

class JobsListAPIView(generics.ListAPIView):
     serializer_class = JobListSerialzer
      # pagination_class = ListLimitOffsetPagination
     permission_classes = [UserIsAuthenticated]

     def get_queryset(self, *args, **kwargs):
            # print('self.request.auth', self.request.auth.application.user.userprofile.user_company.id)

            qs = Jobs.objects.all()
            # if using body data json
            query = self.data.get("query")
            # else
            query = self.request.query_params.get("query")

        if query is not None:
            qs = qs.filter(job_status=query, job_company = self.request.auth.application.company).exclude(job_is_deleted = True)

        return qs

надеюсь, что это поможет

для более подробной информации перейдите по этой ссылке

55
задан Ayman Hourieh 14 May 2009 в 08:22
поделиться

5 ответов

#include <cstdio>
#include <windows.h>
#include <tlhelp32.h>

int main( int, char *[] )
{
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(snapshot, &entry) == TRUE)
    {
        while (Process32Next(snapshot, &entry) == TRUE)
        {
            if (stricmp(entry.szExeFile, "target.exe") == 0)
            {  
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);

                // Do stuff..

                CloseHandle(hProcess);
            }
        }
    }

    CloseHandle(snapshot);

    return 0;
}

Also, if you'd like to use PROCESS_ALL_ACCESS in OpenProcess, you could try this:

#include <cstdio>
#include <windows.h>
#include <tlhelp32.h>

void EnableDebugPriv()
{
    HANDLE hToken;
    LUID luid;
    TOKEN_PRIVILEGES tkp;

    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);

    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Luid = luid;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL);

    CloseHandle(hToken); 
}

int main( int, char *[] )
{
    EnableDebugPriv();

    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(snapshot, &entry) == TRUE)
    {
        while (Process32Next(snapshot, &entry) == TRUE)
        {
            if (stricmp(entry.szExeFile, "target.exe") == 0)
            {  
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);

                // Do stuff..

                CloseHandle(hProcess);
            }
        }
    }

    CloseHandle(snapshot);

    return 0;
}
76
ответ дан 7 November 2019 в 07:18
поделиться

Следующий код показывает, как вы можете использовать toolhelp и OpenProcess, чтобы получить дескриптор процесса. Обработка ошибок удалена для краткости.

HANDLE GetProcessByName(PCSTR name)
{
    DWORD pid = 0;

    // Create toolhelp snapshot.
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 process;
    ZeroMemory(&process, sizeof(process));
    process.dwSize = sizeof(process);

    // Walkthrough all processes.
    if (Process32First(snapshot, &process))
    {
        do
        {
            // Compare process.szExeFile based on format of name, i.e., trim file path
            // trim .exe if necessary, etc.
            if (string(process.szExeFile) == string(name))
            {
               pid = process.th32ProcessID;
               break;
            }
        } while (Process32Next(snapshot, &process));
    }

    CloseHandle(snapshot);

    if (pid != 0)
    {
         return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    }

    // Not found


       return NULL;
}
15
ответ дан 7 November 2019 в 07:18
поделиться

Есть два основных метода. Первый использует PSAPI; В MSDN есть пример , который использует EnumProcesses , OpenProcess , EnumProcessModules и GetModuleBaseName .

Другой использует Toolhelp, который я предпочитаю. Используйте CreateToolhelp32Snapshot , чтобы получить снимок списка процессов, пройдитесь по нему с помощью Process32First и Process32Next , которые предоставляют имя модуля и идентификатор процесса, пока не найдете тот вы хотите, а затем вызовите OpenProcess , чтобы получить дескриптор.

12
ответ дан 7 November 2019 в 07:18
поделиться

Проверьте: Статья MSDN

Вы можете использовать GetModuleName (я думаю?), Чтобы получить имя и проверить его.

2
ответ дан 7 November 2019 в 07:18
поделиться

OpenProcess Функция

Из MSDN:

Чтобы открыть дескриптор другого локального процесса и получить полные права доступа,

1
ответ дан 7 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: