|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
OBTENIR LES PLAGES MÉMOIRE UTILISÉES PAR UN PROCESSUS DANS LA MÉMOIRE VIRTUELLE
Information sur la source
Description
Ce code permet de savoir quelles sont les plages mémoire (à savoir l'adresse de départ et la taille de la région) utilisées par un processus. Avant de vous donner le code, voici une petite aide (forte utile) pour comprendre comment est partitionné l'espace mémoire virtuelle d'un processus ==> http://minso.free.fr/cavinfo/systeme/memoirevirtuelle.html Pour le code en lui même, çà réside dans l'utiisation de l'API VirtualQueryEx. Ce code présente également : -comment obtenir les droits pour son application pour pouvoir obtenir le handle de n'importe quel processus (avec la procédure GetAllPrivileges) -comment lister les processus (rien de nouveau)
Source
- 'Je ne donne ici que la procédure pour obtenir les espaces mémoire, l'exemple et les déclaration sont dans le *.zip
-
-
-
- '-------------------------------------------------------
- 'obtient les différentes zones mémoire d'un processus utilisées dans la zone virtuelle
- '-------------------------------------------------------
- Public Sub RetrieveMemRegions(ByVal lPid As Long, ByRef lBaseAdress() As Long, ByRef lRegionSize() As Long)
- Dim lHandle As Long
- Dim lPosMem As Long
- Dim lRet As Long
- Dim lLenMBI As Long
- Dim mbi As MEMORY_BASIC_INFORMATION
- Dim si As SYSTEM_INFO
-
- 'initialise les tableaux
- ReDim lBaseAdress(0)
- ReDim lRegionSize(0)
-
- 'obtient le handle du processus
- lHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lPid)
-
- lLenMBI = Len(mbi) 'taille de la structure
- GetSystemInfo si 'obtient les infos sur les adresses de début et de fin de la plage mémoire maximum
-
- lPosMem = si.lpMinimumApplicationAddress 'adresse la plus petite ==> part de là
-
- Do While lPosMem < si.lpMaximumApplicationAddress 'tant que l'adresse est inférieure à l'adresse maximale
- mbi.RegionSize = 0
-
- 'obtient les infos sur les régions mémoire du processus définit par son handle hProcess
- lRet = VirtualQueryEx(lHandle, ByVal lPosMem, mbi, lLenMBI)
-
- If lRet = lLenMBI Then
-
- If (mbi.lType = MEM_PRIVATE) And (mbi.State = MEM_COMMIT) Then
- 'alors utilisé par le processus, on récupère les infos
-
- If mbi.RegionSize > 0 Then
- 'région non nulle, alors on la stocke dans les tableaux résultats
- 'les redimensionne
- ReDim Preserve lBaseAdress(UBound(lBaseAdress) + 1)
- ReDim Preserve lRegionSize(UBound(lRegionSize) + 1)
- 'stocke à la fin
- lRegionSize(UBound(lRegionSize)) = mbi.RegionSize
- lBaseAdress(UBound(lBaseAdress)) = mbi.BaseAddress
- End If
-
- End If
- 'continue la recherche des régions (ajoute la taille de la région à l'adresse de départ ==> donne la prochaine adresse de départ)
-
- On Error GoTo ErrCapacityGestion 'dépassement de capacité pour la dernière adresse+regionsize
-
- lPosMem = mbi.BaseAddress + mbi.RegionSize 'fait l'ajout
-
- Else
- 'recherche terminée
- Exit Do
- End If
- Loop
-
- ErrCapacityGestion:
- CloseHandle lHandle 'ferme le handle du processus
- End Sub
'Je ne donne ici que la procédure pour obtenir les espaces mémoire, l'exemple et les déclaration sont dans le *.zip
'-------------------------------------------------------
'obtient les différentes zones mémoire d'un processus utilisées dans la zone virtuelle
'-------------------------------------------------------
Public Sub RetrieveMemRegions(ByVal lPid As Long, ByRef lBaseAdress() As Long, ByRef lRegionSize() As Long)
Dim lHandle As Long
Dim lPosMem As Long
Dim lRet As Long
Dim lLenMBI As Long
Dim mbi As MEMORY_BASIC_INFORMATION
Dim si As SYSTEM_INFO
'initialise les tableaux
ReDim lBaseAdress(0)
ReDim lRegionSize(0)
'obtient le handle du processus
lHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lPid)
lLenMBI = Len(mbi) 'taille de la structure
GetSystemInfo si 'obtient les infos sur les adresses de début et de fin de la plage mémoire maximum
lPosMem = si.lpMinimumApplicationAddress 'adresse la plus petite ==> part de là
Do While lPosMem < si.lpMaximumApplicationAddress 'tant que l'adresse est inférieure à l'adresse maximale
mbi.RegionSize = 0
'obtient les infos sur les régions mémoire du processus définit par son handle hProcess
lRet = VirtualQueryEx(lHandle, ByVal lPosMem, mbi, lLenMBI)
If lRet = lLenMBI Then
If (mbi.lType = MEM_PRIVATE) And (mbi.State = MEM_COMMIT) Then
'alors utilisé par le processus, on récupère les infos
If mbi.RegionSize > 0 Then
'région non nulle, alors on la stocke dans les tableaux résultats
'les redimensionne
ReDim Preserve lBaseAdress(UBound(lBaseAdress) + 1)
ReDim Preserve lRegionSize(UBound(lRegionSize) + 1)
'stocke à la fin
lRegionSize(UBound(lRegionSize)) = mbi.RegionSize
lBaseAdress(UBound(lBaseAdress)) = mbi.BaseAddress
End If
End If
'continue la recherche des régions (ajoute la taille de la région à l'adresse de départ ==> donne la prochaine adresse de départ)
On Error GoTo ErrCapacityGestion 'dépassement de capacité pour la dernière adresse+regionsize
lPosMem = mbi.BaseAddress + mbi.RegionSize 'fait l'ajout
Else
'recherche terminée
Exit Do
End If
Loop
ErrCapacityGestion:
CloseHandle lHandle 'ferme le handle du processus
End Sub
Conclusion
Encore un p'tit bout de mon editeur hexa, qui viendra probablement dans plus trop trop longtemps. N'oubliez pas de commenter, et de noter ;) Merci, @+
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
"mémoire virtuelle insuffisante" [ par LeoNoAiolia84 ]
Salut,J'ai créé un programme avec un nombre assez important de tableaux et de variables, et lorsqu'il est executé plusieur fois de suite je reçois le
propriétés [ par MatthieuFourcade ]
Bonjour, je suis en train de faire un logiciel. Mais j'ai juste une petite question. Dans mon logiciel il y a pas mal d'option. Et je voudrais les gar
Process thread mémory... [ par nicolas12 ]
bonjour a vousje cherche à lire et a stoquer sous forme de fichier toutes les plages mémoires qu'une application utilise, et a modifier automatiquemen
MSFlexgrid en mémoire... [ par binette1er ]
Bonjour, j'ai besoin de garder en mémoire temporaire un MSFlexgrid avec des données stoquées dedans; je voudrais pouvoir le visualiser par après...pou
selection dans excel et envoie par mail [ par vbdebut ]
Bonjour à tous,J'aurai besoin d'un tuyau. Je voudrai séléctionner une plage de cellule dans une feuille excel et pouvoir l'envoyer par e-mail. Cela pe
Infos Mémoire [ par crenaud76 ]
Salut à tous !!Je recherche une fonction (ca sent l'API) permettant d'obtenir des infos sur la mémoire :Mémoire physique et virtuelle, taille totale,
Mémoire vidéo? [ par nicko33 ]
Bonsoir à tousj'aurai aimé savoir si c'était possible d'augmenter la mémoire vidéo partagée de mon ordinateur portable. C'est un compaq pressario muni
modifier un fichier en mémoire vive [ par flippouille ]
Comment puis-je mémoriser tous les octets d'un fichier en mémoire vive afin de faire un traitement dessusActuellement, j'ouvre un fichier sur le disue
selectionner une plage [ par isamancal ]
Comment faire pour a partir de la commande "Range("A1").End(xlDown).Offset(1, 0).Select" pour selectionner toutes les cellules au dessus de la premi
Memoire virtuelle insuffisante sur impression [ par Como ]
Bonjour,J'imprime une feuille contenant un MSHFlexgrid à l'aide de la commande Me.printForm. Mon document fait environ 48 Mo dans ma fil d'impression
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version

HTC Touch HD
Entre 25€ et 605€
|