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 중국어 웹사이트의 기타 관련 기사를 참조하세요!