Process32First/Process32Next X64下使用

  PProcessEntryW = ^TProcessEntryW;
  TProcessEntryW = Record
    dwSize:DWORD;
    {$IFDEF CPUX64}
    cntUsage:UInt64;
    {$ELSE}
    cntUsage:DWORD;
    {$ENDIF}
    th32ProcessID:DWORD;
    th32DefaultHeapID:DWORD;
    th32ModuleID:DWORD;
    cntThreads:DWORD;
    th32ParentProcessID:DWORD;
    pcPriClassBase:DWORD;
    dwFlags:DWORD;
    szExeFile:Array[0..MAX_PATH - 1] of WideChar;
  end;

将数据类型tagPROCESSENTRY32中的cntUsage修改下即可 X86下用32位的无符号整数X64下用64位的无符号整数

之前搜了好多有人在MSDN社区说把dwFlags修改成64位整数结果测试后完全无效....

只修改个cntUsage即可 Win7 SP1 X64测试完全可用

Patch1:

不过有个很蛋疼的问题是 这套API本应该是给32位用的 64位用本来就不合适

强制改数据类型用是可以用但是 数据会错位...

cntUsage修改成8位直接的64位整数后直接取th32ProcessID的话肯定会返回0

解决方法就是向前挪2位....

Patch2:

PID

th32ProcessID        = PDWORD(PByte(DWORD(@tagPROCESSENTRY32) + 8))^;

父进程PID

th32ParentProcessID  = PDWORD(PByte(DWORD(@tagPROCESSENTRY32) + 32))^;

进程名称

szExeFile            = PWideChar(PByte(DWORD(@tagPROCESSENTRY32) + 44));

其余的不用基本没啥用

标签: x64, process32first, process32next, win64, processentry32, tagprocessentry32, createtoolhelp32snapshot, 进程, 枚举, 列表

添加新评论