2012-07-14 3 views
1

다른 프로세스 메모리를 스캔하는 코드를 작성하고 있습니다. 그러나 그것은 여기서 질문이 아닙니다. 실행중인 프로세스를 나열하려면 Process32First/Process32Next를 사용하고 있습니다. 하지만 컴파일러 디버그 내부에서 실행하면 모든 프로세스 (시스템 프로세스와 같은 다른 사용자 포함)가 생성됩니다. 하지만 .exe를 실행하면 내 사용자 만 프로세스를 가져옵니다. 코드의 스트레치는 다음과 같습니다.Process32 다른 결과가

Handle:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); 
Struct.dwSize:=Sizeof(TProcessEntry32); 
Process32First(Handle, Struct); 
    repeat 
    Memo2.Lines.Append(Struct.szExeFile); 
    MemStart:= 0; 
    PID:= Struct.th32ProcessID; 
    PIDHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or 
          PROCESS_VM_READ, false, PID); 
    if OS64 = true then 
    begin 
     if IsProcWow64 then 
     begin 
     Proc32:= true; 
     end 
    else 
     Proc32:= false; 
    end; 
if (Proc32 = true) and (POS(Struct.szExeFile, Application.ExeName) = 0) then 
     begin 
     Memo1.Lines.Append('Process:: '+Struct.szExeFile+' - Scanning'); 
     CatchYa(Struct.szExeFile); 
     end; 
    CloseHandle(PIDHandle); 
until (not Process32Next(Handle,Struct)); 

32 비트 만 필요하기 때문에 64 비트 프로세스를 확인할 수 있습니다.

+1

다른 결과가 나오는 이유에 대한 질문입니다. 당신이 말하는 것을 잊었습니다. –

답변

3

관리자 권한으로 IDE를 실행 중이며 디버거에서 시작할 때 프로그램이 이러한 권한을 상속받습니다.

프로그램에 관리자 권한이 필요한 경우가 아니면 상승 된 IDE를 실행할 필요가 없습니다. 일반 사용자로 실행할 수 있어야하며, 프로그램을 실행하면 동일한 프로그램이 실행됩니다.

+0

관리자 권한으로 내 .exe를 실행하려고했지만 여전히 다른 결과가 나타납니다. – user1526124

+0

@ user1526124 화면이 보이지 않으며 출력의 차이를 알려주지 않습니다. –

0

os64가 true 일 때만 proc32를 초기화하는 것처럼 보입니다.

+0

아니요, form.create에 OS가 64 비트인지 확인합니다. 그렇지 않다면 Proc32 var을 true로 설정하고, 그렇다면 OS64를 true로 설정합니다. 필자가 여기에 붙여 넣은 절차는 OS가 64 인 경우 Proc32 var을 변경합니다 ... 그렇지 않다면 'if'에 들어 가지 않고 Proc32를 변경하지 마십시오. 어쨌든 진실을 계속하십시오. – user1526124

관련 문제