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

ご覧のとおり、32 ビットのみが必要なため、64 ビット プロセスをチェックしています。

4

2 に答える 2

3

管理者特権で IDE を実行しており、デバッガーから起動すると、プログラムはそれらのアクセス許可を継承します。

プログラムに管理者特権が必要でない限り、昇格した IDE を実行する必要もありません。通常のユーザーとして実行できるはずです。その後、プログラムは、単独で実行した場合と同じリストを取得します。

于 2012-07-14T22:28:29.747 に答える
0

os64 が true の場合にのみ proc32 を初期化するようです。

于 2012-07-15T00:05:12.917 に答える