Liste de toutes les pages de mémoire allouée par tous accessible processus


Comment afficher la liste de toutes les pages de mémoire allouée par tous accessible processus
Créer un formulaire avec un bouton et un treeview, le nom de l'arborescence tvwProcessList. Nom du bouton btnProcessList.

utilise Windows
procedure TForm1.btnProcessListClick(Sender: TObject)
var i,l:integer
& ! & ! & ! & nbsp pid:THandle
& ! & ! & ! & nbsp meminfo:MEMORY_BASIC_INFORMATION
& ! & ! & ! & nbsp memstart:pointeur
& ! & ! & ! & nbsp memsize:Integer
& ! & ! & ! & nbsp s,attr:String
& ! & ! & ! & nbsp totuse:Integer
& ! & ! & ! & nbsp lpMsgBuf : PCHAR
& ! & ! & ! & nbsp pn, pidn, ln:TTreeNode
begin
& nbsp & nbsp btnProcessList.Enabled := false
& nbsp & nbsp tvwProcessList.Éléments.Clair
& nbsp & nbsp pn:=tvwProcessList.Éléments.AddFirst (néant', Cet ordinateur')
& nbsp & nbsp for i:=0 à 2000 n' //
& ! & ! & ! & nbsp begin //PROCESS_QUERY_INFORMATION
& ! & ! & ! & ! & ! & nbsp pid:=OpenProcess (PROCESS_ALL_ACCESS{PROCESS_VM_OPERATION ou PROCESS_QUERY_INFORMATION ou PROCESS_VM_WRITE}, false, i*4)
& ! & ! & ! & ! & ! & nbsp si pid<>0 then
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp //ajout d'un treenode:
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp pidn := tvwProcessList.Éléments.AddChild (pn, IntToStr(i*4{pid}))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp memstart := 0
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp totuse := 0
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp l:=VirtualQueryEx (pid,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp memstart,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MemInfo,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp SizeOf(MEMORY_BASIC_INFORMATION))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp while (l=SizeOf(MEMORY_BASIC_INFORMATION)) ne
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si l'Application.Résilié
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp sortie
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si meminfo.Etat=MEM_COMMIT puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp totuse := totuse meminfo.RegionSize
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := '
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_NOACCESS)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr ''AUCUN ACCÈS'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_READONLY)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'READONLY'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_READWRITE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'READWRITE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_WRITECOPY)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'WRITECOPY'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_EXECUTE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXÉCUTER'

& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_EXECUTE_READ)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTE_READ'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_EXECUTE_READWRITE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTE_READWRITE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_EXECUTE_WRITECOPY)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTE_WRITECOPY'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_GUARD)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'GARDE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Protéger et PAGE_NOCACHE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'NOCACHE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ln := tvwProcessList.Éléments.AddChild (pidn,
& ! & ! & ! & ! & ! & nbsp - ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Format ('Attr: %d: %s, de Base: %d, taille: %d',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp [meminfo.protéger, attr, integer(meminfo.BaseAddress), meminfo.RegionSize]))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Application.ProcessMessages
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp entier(memstart) := integer(meminfo.BaseAddress) meminfo.regionsize
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp entier(memstart):=integer(memstart) memsize
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp l:=VirtualQueryEx (pid,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp memstart,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MemInfo,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp SizeOf(MEMORY_BASIC_INFORMATION))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp pidn.Text := Format ('pid: %d, attribué: %d', [i*4, totuse])
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp CloseHandle(pid)
& ! & ! & ! & nbsp fin
& nbsp & nbsp btnProcessList.Enabled := true
fin

Explanetion:
Le windows ID de processus est toujours une multiplication de 4. AINSI, l'accès aux processus nr. 8 accès à la même procédure que la poignée de 9,10 et 11.
Nous suffit d'utiliser la boucle, une liste d'ID. Il y a de meilleures façons de le faire, mais qui est en dehors du champ d'application de cet article, et cette méthode fonctionne très bien.
SI nous avons openened un processus, nous avons la liste de la première page. Nous ajoutons de la taille de cette page à l'adresse de début de la page suivante pour récupérer.
toutes les pages Ne sont allouées, nous pouvons le vérifier avec la MEM_COMMIT balise.
Si une page est consacrée, nous examinons les attributs, et ajouter un nœud de l'arborescence.
Cela peut prendre un certain temps (en particulier l'ajout de tous ces nœuds de l'arborescence).
une fois que nous avons terminé, on ferme la processhandle avec CloseHandle. Être très sûr à ce faire!!! La non fermeture de la poignée conduire à de drôles de résultats, et si vous faites cela plusieurs fois, vous pouvez très bien finir dans le redémarrage de votre système sincew tout est lent.









Liste de toutes les pages de memoire allouee par tous accessible processus


Liste de toutes les pages de memoire allouee par tous accessible processus : Plusieurs milliers de conseils pour vous faciliter la vie.


Comment afficher la liste de toutes les pages de memoire allouee par tous accessible processus
Creer un formulaire avec un bouton et un treeview, le nom de l'arborescence tvwProcessList. Nom du bouton btnProcessList.

utilise Windows
procedure TForm1.btnProcessListClick(Sender: TObject)
var i,l:integer
& ! & ! & ! & nbsp pid:THandle
& ! & ! & ! & nbsp meminfo:MEMORY_BASIC_INFORMATION
& ! & ! & ! & nbsp memstart:pointeur
& ! & ! & ! & nbsp memsize:Integer
& ! & ! & ! & nbsp s,attr:String
& ! & ! & ! & nbsp totuse:Integer
& ! & ! & ! & nbsp lpMsgBuf : PCHAR
& ! & ! & ! & nbsp pn, pidn, ln:TTreeNode
begin
& nbsp & nbsp btnProcessList.Enabled := false
& nbsp & nbsp tvwProcessList.Elements.Clair
& nbsp & nbsp pn:=tvwProcessList.Elements.AddFirst (neant', Cet ordinateur')
& nbsp & nbsp for i:=0 a 2000 n' //
& ! & ! & ! & nbsp begin //PROCESS_QUERY_INFORMATION
& ! & ! & ! & ! & ! & nbsp pid:=OpenProcess (PROCESS_ALL_ACCESS{PROCESS_VM_OPERATION ou PROCESS_QUERY_INFORMATION ou PROCESS_VM_WRITE}, false, i*4)
& ! & ! & ! & ! & ! & nbsp si pid<>0 then
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp //ajout d'un treenode:
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp pidn := tvwProcessList.Elements.AddChild (pn, IntToStr(i*4{pid}))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp memstart := 0
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp totuse := 0
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp l:=VirtualQueryEx (pid,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp memstart,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MemInfo,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp SizeOf(MEMORY_BASIC_INFORMATION))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp while (l=SizeOf(MEMORY_BASIC_INFORMATION)) ne
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si l'Application.Resilie
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp sortie
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si meminfo.Etat=MEM_COMMIT puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp totuse := totuse meminfo.RegionSize
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := '
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_NOACCESS)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr ''AUCUN ACCES'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_READONLY)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'READONLY'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_READWRITE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'READWRITE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_WRITECOPY)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'WRITECOPY'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_EXECUTE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTER'

& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_EXECUTE_READ)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTE_READ'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_EXECUTE_READWRITE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTE_READWRITE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_EXECUTE_WRITECOPY)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'EXECUTE_WRITECOPY'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_GUARD)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'GARDE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (0<>meminfo.Proteger et PAGE_NOCACHE)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp attr := attr 'NOCACHE'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ln := tvwProcessList.Elements.AddChild (pidn,
& ! & ! & ! & ! & ! & nbsp - ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Format ('Attr: %d: %s, de Base: %d, taille: %d',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp [meminfo.proteger, attr, integer(meminfo.BaseAddress), meminfo.RegionSize]))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Application.ProcessMessages
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp entier(memstart) := integer(meminfo.BaseAddress) meminfo.regionsize
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp entier(memstart):=integer(memstart) memsize
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp l:=VirtualQueryEx (pid,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp memstart,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MemInfo,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp SizeOf(MEMORY_BASIC_INFORMATION))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp pidn.Text := Format ('pid: %d, attribue: %d', [i*4, totuse])
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp CloseHandle(pid)
& ! & ! & ! & nbsp fin
& nbsp & nbsp btnProcessList.Enabled := true
fin

Explanetion:
Le windows ID de processus est toujours une multiplication de 4. AINSI, l'acces aux processus nr. 8 acces a la meme procedure que la poignee de 9,10 et 11.
Nous suffit d'utiliser la boucle, une liste d'ID. Il y a de meilleures façons de le faire, mais qui est en dehors du champ d'application de cet article, et cette methode fonctionne tres bien.
SI nous avons openened un processus, nous avons la liste de la premiere page. Nous ajoutons de la taille de cette page a l'adresse de debut de la page suivante pour recuperer.
toutes les pages Ne sont allouees, nous pouvons le verifier avec la MEM_COMMIT balise.
Si une page est consacree, nous examinons les attributs, et ajouter un nœud de l'arborescence.
Cela peut prendre un certain temps (en particulier l'ajout de tous ces nœuds de l'arborescence).
une fois que nous avons termine, on ferme la processhandle avec CloseHandle. Etre tres sûr a ce faire!!! La non fermeture de la poignee conduire a de droles de resultats, et si vous faites cela plusieurs fois, vous pouvez tres bien finir dans le redemarrage de votre systeme sincew tout est lent.


Liste de toutes les pages de mémoire allouée par tous accessible processus

Liste de toutes les pages de mémoire allouée par tous accessible processus : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation