processus et memoire d'occupation traduction demandé ...
Publié : mar. 16/févr./2010 21:51
.....................
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
; -------------------------------------------------------
; Obtient les différentes zones mémoire d'un processus utilisées dans la zone virtuelle
; -------------------------------------------------------
Procedure RetrieveMemRegions(lPid.L, Array lBaseAdress.L(1), Array lRegionSize.L(1) )
Protected lHandle.L
Protected lPosMem.L
Protected lRet.L
Protected lLenMBI.L
Protected mbi.MEMORY_BASIC_INFORMATION
Protected si.SYSTEM_INFO
; Initialise les tableaux
ReDim lBaseAdress.L(0)
ReDim lRegionSize.L(0)
; Obtient le handle du processus
lHandle = OpenProcess_(#PROCESS_ALL_ACCESS, #False, lPid)
lLenMBI = SizeOf(MEMORY_BASIC_INFORMATION) ; 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à
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, @lPosMem, mbi, lLenMBI)
If lRet = lLenMBI
If (mbi\lType = #MEM_PRIVATE) And (mbi\State = #MEM_COMMIT)
; Alors utilisé par le processus, on récupère les infos
If mbi\RegionSize > 0
; Région non nulle, alors on la stocke dans les tableaux résultats
; Les redimensionne
ReDim lBaseAdress.L(ArraySize(lBaseAdress() ) + 1)
ReDim lRegionSize.L(ArraySize(lRegionSize() ) + 1)
; Stocke à la fin
lRegionSize(ArraySize(lRegionSize() ) ) = mbi\RegionSize
lBaseAdress(ArraySize(lBaseAdress() ) ) = mbi\BaseAddress
EndIf
EndIf
; 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)
lPosMem = mbi\BaseAddress + mbi\RegionSize ; Fait l'ajout
Else
; Recherche terminée
Break
EndIf
Wend
CloseHandle_(lHandle)
EndProcedure
Code : Tout sélectionner
# On Error GoTo ErrCapacityGestion 'dépassement de capacité pour la dernière adresse+regionsize
Code : Tout sélectionner
! JC l_ErrCapacityGestion
Code : Tout sélectionner
lPosMem = mbi\BaseAddress + mbi\RegionSize ; Fait l'ajout