Delphi 枚举系统进程以及模块文件名

来源:互联网 发布:linux 虚拟ip配置 编辑:程序博客网 时间:2024/04/29 02:17
  1.   uses Tlhelp32;
  2. procedure SetPrivilege;//DEBUG提权
  3. var
  4. OldTokenPrivileges, TokenPrivileges: TTokenPrivileges;
  5. ReturnLength: dword;
  6. hToken: THandle;
  7. Luid: int64;
  8. begin
  9. OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
  10. LookupPrivilegeValue(nil'SeDebugPrivilege', Luid);
  11. TokenPrivileges.Privileges[0].luid := Luid;
  12. TokenPrivileges.PrivilegeCount := 1;
  13. TokenPrivileges.Privileges[0].Attributes := 0;
  14. AdjustTokenPrivileges(hToken, False, TokenPrivileges, SizeOf(TTokenPrivileges), OldTokenPrivileges, ReturnLength);
  15. OldTokenPrivileges.Privileges[0].luid := Luid;
  16. OldTokenPrivileges.PrivilegeCount := 1;
  17. OldTokenPrivileges.Privileges[0].Attributes := TokenPrivileges.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED;
  18. AdjustTokenPrivileges(hToken, False, OldTokenPrivileges, ReturnLength, PTokenPrivileges(nil)^, ReturnLength);
  19. end;
  20. procedure TForm1.FormCreate(Sender: TObject);
  21. begin
  22. SetPrivilege;
  23. end;
  24. procedure TForm1.ProcessEnum(Sender: TObject);
  25. var
  26. ProcessList :Thandle;
  27. pe :TPROCESSENTRY32; 
  28. node :TTreenode; 
  29. processnumber :integer
  30. procedure ModuleEnum(processid:Dword);
  31. var
  32. ModuleList :Thandle;
  33. pm :TMODULEENTRY32;
  34. begin
  35. ModuleList:=CreateToolhelp32Snapshot
  36. (TH32CS_SNAPMODULE,processID);
  37. pm.dwSize:=sizeof(TMODULEENTRY32);
  38. if module32first(ModuleList,pm)
  39. then begin
  40. treeview1.Items.addchild(node,pm.szexepath);
  41. while module32next(ModuleList,pm) do 
  42. treeview1.items.addchild(node,pm.szexepath); 
  43. end;
  44. closehandle(ModuleList);
  45. end// ModuleEnum  
  46. begin // ProcessEnum
  47. processnumber:=0;
  48. treeview1.Items.Clear; 
  49. ProcessList:=CreateToolhelp32Snapshot
  50. (TH32CS_SNAPPROCESS,0);
  51. pe.dwSize:=sizeof(TPROCESSENTRY32);
  52. if process32first(ProcessList,pe) then 
  53. begin 
  54. node:=treeview1.Items.Add(nil,pe.szexefile);
  55. ModuleEnum(pe.th32ProcessID); 
  56. inc(processnumber);
  57. while process32next(ProcessList,pe) do
  58. begin
  59. node:=treeview1.Items.Add(nil,pe.szexefile);
  60. ModuleEnum(pe.th32ProcessID);
  61. inc(processnumber);
  62. end;
  63. end;
  64. edit1.text:='系统进程:'+inttostr(processnumber);
  65. closehandle(ProcessList);
  66. end;
原创粉丝点击