1

我正在编写代码来扫描另一个进程内存。但这不是这里的问题。要列出正在运行的进程,我使用的是 Process32First/Process32Next。但是当我在编译器调试中运行它时,它会获取所有进程(包括其他用户,如系统进程),但是当我只运行 .exe 时,只能从我的用户那里获取进程。代码的延伸如下

 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));

如您所见,我正在检查 64 位进程,因为我只想要 32 位。

4

2 回答 2

3

您正在使用管理权限运行 IDE,当您从调试器启动时,您的程序会继承这些权限。

除非您的程序需要管理权限,否则您也不需要运行提升的 IDE。它应该能够以普通用户身份运行,然后您的程序将获得与您自己运行时相同的列表。

于 2012-07-14T22:28:29.747 回答
0

似乎您仅在 os64 为真时才初始化 proc32 。

于 2012-07-15T00:05:12.917 回答