> 백엔드 개발 > C++ > C에서 이름으로 프로세스 핸들을 검색하려면 어떻게 해야 합니까?

C에서 이름으로 프로세스 핸들을 검색하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-20 18:25:15
원래의
575명이 탐색했습니다.

How Can I Retrieve a Process Handle by Name in C  ?

C에서 이름으로 프로세스 핸들 검색

C에서는 이름을 기반으로 프로세스를 조작해야 하는 상황이 발생할 수 있습니다. 예를 들어, 창 핸들을 사용하지 않고 "example.exe"라는 프로세스를 종료할 수 있습니다. 이 질문은 이 특정 시나리오를 자세히 살펴보고 해결책을 제시합니다.

이름으로 프로세스 핸들을 검색하려면 Windows API 함수 CreateToolhelp32Snapshot 및 Process32Next를 활용할 수 있습니다. 다음은 이 접근 방식을 보여주는 코드 조각입니다.

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

int main() {
  // Create a snapshot of running processes
  HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  // Iterate over the processes
  PROCESSENTRY32 entry;
  entry.dwSize = sizeof(PROCESSENTRY32);
  if (Process32First(snapshot, &entry) == TRUE) {
    while (Process32Next(snapshot, &entry) == TRUE) {
      // Check if this is the process we want
      if (strcmp(entry.szExeFile, "example.exe") == 0) {
        // Open a handle to the process
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
        // Perform desired operations on the process
        CloseHandle(hProcess);  // Close the handle
      }
    }
  }

  CloseHandle(snapshot);  // Close the snapshot handle
  return 0;
}
로그인 후 복사

이 솔루션은 실행 중인 모든 프로세스를 반복하고 해당 실행 파일 이름을 "example.exe"와 비교합니다. 일치하는 항목이 발견되면 해당 프로세스에 대한 핸들을 얻고 종료와 같은 작업을 수행하는 데 사용할 수 있습니다(TerminateProcess를 통해).

참고: OpenProcess에서 PROCESS_ALL_ACCESS를 사용할 계획인 경우 , SE_DEBUG_NAME 권한을 활성화하여 프로세스의 권한을 높여야 할 수도 있습니다. 이를 수행하는 코드는 다음과 같습니다.

void EnableDebugPriv() {
  // Enable debug privilege
  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);
}
로그인 후 복사

위 내용은 C에서 이름으로 프로세스 핸들을 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿