Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet


Wie alle Speicherseiten, die von allen Accesible Prozessen zugeordnet aufgelistet
Erstellen Sie ein Formular mit einer Schaltfläche und einer Treeview, Namen der Treeview-TvwProcessList. Name der Schaltfläche BtnProcessList.

uses Windows;
procedure TForm1.btnProcessListClick(Sender: TObject);
var i,l:integer;
    pid:THandle;
    meminfo:MEMORY_BASIC_INFORMATION;
    memstart:pointer;
    memsize:Integer;
    s,attr:String;
    totuse:Integer;
    lpMsgBuf : PCHAR;
    pn, pidn, ln:TTreeNode;
begin
  btnProcessList.Enabled := false;
  tvwProcessList.Items.Clear;
  pn:=tvwProcessList.Items.AddFirst (nil, 'This computer');
  for i:=0 to 2000 do //
    begin //PROCESS_QUERY_INFORMATION
      pid:=OpenProcess (PROCESS_ALL_ACCESS{PROCESS_VM_OPERATION or PROCESS_QUERY_INFORMATION or PROCESS_VM_WRITE}, false, i*4);
      if pid<>0 then
        begin
          //add treenode:
          pidn := tvwProcessList.Items.AddChild (pn, IntToStr(i*4{pid}));
          memstart := 0;
          totuse := 0;
          l:=VirtualQueryEx (pid,
                          memstart,
                          MemInfo,
                          SizeOf(MEMORY_BASIC_INFORMATION));
          while (l=SizeOf(MEMORY_BASIC_INFORMATION)) do
            begin
              if Application.Terminated then
                exit;
              if meminfo.State=MEM_COMMIT then
                begin
                  totuse := totuse+meminfo.RegionSize;
                  attr := '';
                  if (0<>meminfo.Protect and PAGE_NOACCESS) then
                    attr := attr+'NO ACCESS ';
                  if (0<>meminfo.Protect and PAGE_READONLY) then
                    attr := attr+'READONLY ';
                  if (0<>meminfo.Protect and PAGE_READWRITE) then
                    attr := attr+'READWRITE ';
                  if (0<>meminfo.Protect and PAGE_WRITECOPY) then
                    attr := attr+'WRITECOPY ';
                  if (0<>meminfo.Protect and PAGE_EXECUTE) then
                    attr := attr+'EXECUTE ';

                  if (0<>meminfo.Protect and PAGE_EXECUTE_READ) then
                    attr := attr+'EXECUTE_READ ';
                  if (0<>meminfo.Protect and PAGE_EXECUTE_READWRITE) then
                    attr := attr+'EXECUTE_READWRITE ';
                  if (0<>meminfo.Protect and PAGE_EXECUTE_WRITECOPY) then
                    attr := attr+'EXECUTE_WRITECOPY ';
                  if (0<>meminfo.Protect and PAGE_GUARD) then
                    attr := attr+'GUARD ';
                  if (0<>meminfo.Protect and PAGE_NOCACHE) then
                    attr := attr+'NOCACHE ';
                  ln := tvwProcessList.Items.AddChild (pidn,
                           Format ('Attr: %d: %s, Base: %d, size: %d',
                                   [meminfo.protect, attr, integer(meminfo.BaseAddress), meminfo.RegionSize]));
                  Application.ProcessMessages;
                end;
              integer(memstart) := integer(meminfo.BaseAddress)+meminfo.regionsize;
              integer(memstart):=integer(memstart)+memsize;
              l:=VirtualQueryEx (pid,
                              memstart,
                              MemInfo,
                              SizeOf(MEMORY_BASIC_INFORMATION));
            end;
           pidn.Text := Format ('pid: %d, allocated: %d', [i*4, totuse]);
         end;
      CloseHandle(pid);
    end;
  btnProcessList.Enabled := true;
end;

Explanetion:
Die Windows-Prozess-ID ist immer eine Multiplikation von 4. Also, zugreifen auf Prozess nr. 8 greifen auf den gleichen Prozess wie behandeln Sie 9,10 und 11.
Wir einfach eine Liste der möglichen Schleife ID's Es gibt bessere Wege, dies zu tun, aber das ist nicht in den Anwendungsbereich dieses Artikels, und diese Methode funktioniert prima.
Wenn wir einen Prozess openened haben, Listen wir auf die erste Seite. Die Größe dieser Seite fügen wir die Startadresse der nächsten Seite abrufen.
Nicht alle Seiten zugeordnet sind, können wir dies mit dem MEM_COMMIT-Tag überprüfen.
Wenn eine Seite eingepflegt, wir untersuchen Sie die Attribute und einen Baumknoten hinzufügen.
Dies kann eine Weile dauern (vor allem jene Strukturknoten hinzufügen).
Nachdem wir fertig sind, schließen wir den Processhandle mit CloseHandle. Sehr achten Sie, dies zu tun!!! Schließen nicht das Handle zu lustigen Ergebnissen führen wird und wenn Sie dazu mehrmals Sie wohl Ende zu starten Ihr System Sincew bekommt alles langsam.









Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet


Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Wie alle Speicherseiten, die von allen Accesible Prozessen zugeordnet aufgelistet
Erstellen Sie ein Formular mit einer Schaltfläche und einer Treeview, Namen der Treeview-TvwProcessList. Name der Schaltfläche BtnProcessList.

uses Windows;
procedure TForm1.btnProcessListClick(Sender: TObject);
var i,l:integer;
    pid:THandle;
    meminfo:MEMORY_BASIC_INFORMATION;
    memstart:pointer;
    memsize:Integer;
    s,attr:String;
    totuse:Integer;
    lpMsgBuf : PCHAR;
    pn, pidn, ln:TTreeNode;
begin
  btnProcessList.Enabled := false;
  tvwProcessList.Items.Clear;
  pn:=tvwProcessList.Items.AddFirst (nil, 'This computer');
  for i:=0 to 2000 do //
    begin //PROCESS_QUERY_INFORMATION
      pid:=OpenProcess (PROCESS_ALL_ACCESS{PROCESS_VM_OPERATION or PROCESS_QUERY_INFORMATION or PROCESS_VM_WRITE}, false, i*4);
      if pid<>0 then
        begin
          //add treenode:
          pidn := tvwProcessList.Items.AddChild (pn, IntToStr(i*4{pid}));
          memstart := 0;
          totuse := 0;
          l:=VirtualQueryEx (pid,
                          memstart,
                          MemInfo,
                          SizeOf(MEMORY_BASIC_INFORMATION));
          while (l=SizeOf(MEMORY_BASIC_INFORMATION)) do
            begin
              if Application.Terminated then
                exit;
              if meminfo.State=MEM_COMMIT then
                begin
                  totuse := totuse+meminfo.RegionSize;
                  attr := '';
                  if (0<>meminfo.Protect and PAGE_NOACCESS) then
                    attr := attr+'NO ACCESS ';
                  if (0<>meminfo.Protect and PAGE_READONLY) then
                    attr := attr+'READONLY ';
                  if (0<>meminfo.Protect and PAGE_READWRITE) then
                    attr := attr+'READWRITE ';
                  if (0<>meminfo.Protect and PAGE_WRITECOPY) then
                    attr := attr+'WRITECOPY ';
                  if (0<>meminfo.Protect and PAGE_EXECUTE) then
                    attr := attr+'EXECUTE ';

                  if (0<>meminfo.Protect and PAGE_EXECUTE_READ) then
                    attr := attr+'EXECUTE_READ ';
                  if (0<>meminfo.Protect and PAGE_EXECUTE_READWRITE) then
                    attr := attr+'EXECUTE_READWRITE ';
                  if (0<>meminfo.Protect and PAGE_EXECUTE_WRITECOPY) then
                    attr := attr+'EXECUTE_WRITECOPY ';
                  if (0<>meminfo.Protect and PAGE_GUARD) then
                    attr := attr+'GUARD ';
                  if (0<>meminfo.Protect and PAGE_NOCACHE) then
                    attr := attr+'NOCACHE ';
                  ln := tvwProcessList.Items.AddChild (pidn,
                           Format ('Attr: %d: %s, Base: %d, size: %d',
                                   [meminfo.protect, attr, integer(meminfo.BaseAddress), meminfo.RegionSize]));
                  Application.ProcessMessages;
                end;
              integer(memstart) := integer(meminfo.BaseAddress)+meminfo.regionsize;
              integer(memstart):=integer(memstart)+memsize;
              l:=VirtualQueryEx (pid,
                              memstart,
                              MemInfo,
                              SizeOf(MEMORY_BASIC_INFORMATION));
            end;
           pidn.Text := Format ('pid: %d, allocated: %d', [i*4, totuse]);
         end;
      CloseHandle(pid);
    end;
  btnProcessList.Enabled := true;
end;

Explanetion:
Die Windows-Prozess-ID ist immer eine Multiplikation von 4. Also, zugreifen auf Prozess nr. 8 greifen auf den gleichen Prozess wie behandeln Sie 9,10 und 11.
Wir einfach eine Liste der möglichen Schleife ID's Es gibt bessere Wege, dies zu tun, aber das ist nicht in den Anwendungsbereich dieses Artikels, und diese Methode funktioniert prima.
Wenn wir einen Prozess openened haben, Listen wir auf die erste Seite. Die Größe dieser Seite fügen wir die Startadresse der nächsten Seite abrufen.
Nicht alle Seiten zugeordnet sind, können wir dies mit dem MEM_COMMIT-Tag überprüfen.
Wenn eine Seite eingepflegt, wir untersuchen Sie die Attribute und einen Baumknoten hinzufügen.
Dies kann eine Weile dauern (vor allem jene Strukturknoten hinzufügen).
Nachdem wir fertig sind, schließen wir den Processhandle mit CloseHandle. Sehr achten Sie, dies zu tun!!! Schließen nicht das Handle zu lustigen Ergebnissen führen wird und wenn Sie dazu mehrmals Sie wohl Ende zu starten Ihr System Sincew bekommt alles langsam.


Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet

Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung