|
bool __fastcall TFrom::FindProcess(PPROCESS_INFORMATIONREC _Process_Info)
{
hsnapshot = NULL;
hopenprocess = NULL;
PROCESS_MEMORY_COUNTERS PMC;
PROCESSENTRY32 processinfo;
processinfo.dwSize = sizeof(processinfo);
hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hsnapshot == NULL)
{
CloseHandle(hopenprocess);
CloseHandle(hsnapshot);
return false;
}
bool status = Process32First(hsnapshot, &processinfo);
while(status)
{
hopenprocess = OpenProcess(PROCESS_ALL_ACCESS, false, processinfo.th32ProcessID);
DWORD nMomoryInfo = GetLastError();
if(strcmp(processinfo.szExeFile,_Process_Info->szExeName) == 0)
{
_Process_Info->PID = processinfo.th32ProcessID;
_Process_Info->nThreadsCnt = processinfo.cntThreads;
GetProcessMemoryInfo(hopenprocess, &PMC, sizeof(PROCESS_MEMORY_COUNTERS));
_Process_Info->nMomoruInfo = (DWORD)(PMC.WorkingSetSize / 1024);
CloseHandle(hopenprocess);
CloseHandle(hsnapshot);
return true;
}
status = Process32Next(hsnapshot, &processinfo);
}
CloseHandle(hopenprocess);
CloseHandle(hsnapshot);
return false;
}
다음과 같은 소스로 프로세스 정보들을 가져와서 프로세스를 관리하는데
이 부분을 계속 돌리다 보면 핸들갯수가 무한정 증가합니다.
많이 보진 못했지만 몇억개에서 몇십억개 까지 증가하는 것 같은데..ㅜㅜ
이 핸들들을 어떻게 해야하나요?
고수님들 좀 부탁드려요..
|