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
By Wiezutun
Auflisten aller Speicherseiten, die von allen Accesible Prozessen zugeordnet : Mehreren tausend Tipps, um Ihr Leben einfacher machen.