Soyez le premier à donner votre avis sur cette source.
Vue 5 428 fois - Téléchargée 574 fois
'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
3 nov. 2006 à 21:22
MadM@tt ==> le projet arrivera... je sais pas quand ! J'ai pu pas mal avancer avec les vacances, mais la dure vie d'insalien va bientôt reprendre (sans compter IGC qui va me bouffer du temps...dammit) donc avancement du programme au point mort, ou presque ;)
Econs ==> Merci d'avoir confirmé ;) Et en effet, c'est souvent les petits bouts de code qui servent pour construire des trucs plus gros.
@+
3 nov. 2006 à 21:10
Il faut savoir que pas mal de sources empruntent des briques à d'autres sources. Et généralement, les briques ont été trouvées dans des sources qui faisaient, à tout casser 20 lignes.
Autant être efficace. Ce code-ci serait passé inaperçu dans une source de 1000 lignes. Ca aurait été dommage.
3 nov. 2006 à 20:19
C'est le genre de truc que je fais souvent, et je crois que les admins aussi ^^
C'est vrai, on ne fais pas des bouts d'exemple de code à longueur de journée, et je pense que c'est une bonne démarche de présenter des bouts de code comme ça. ça évite de se taper que des projets finis, comme 150 mille calculatrice, ou listeurs de process.
Quand on cherche un bout de code, une fonction (et c'est souvent le cas sur ce site), on préfère tomber sur une source comme ça qu'un projet complet.
Je pense que c'est une bonne idée, mais je suis pas admin alors ... ^^
Et j'ai hate de voir le projet dont tu parles ;)
3 nov. 2006 à 16:34
Bonne prog ++
3 nov. 2006 à 13:51
Il y a des morceaux de mes codes qui peuvent être utiles hors du contexte de mon projet, et qui ne seront pas trouvables par le moteur de recherche quand je l'aurait posté (c'est le cas ici). Donc pour que ces bouts de code servent, je trouve qu'il est utile de les poster comme ceci.
Et je ne fait pas un vulgaire copier/coller, je fait aussi un exemple d'utilisation ;)
Et puis rechercher 80 lignes de code dans plus de 10000... faut en avoir envie !
Si les admins ont un problème avec çà, faut me le dire. Mais il faut savoir que je ne subdivise pas mon projet en multiples fragments, c'est seulement le deuxième source qui est tiré de mon projet ;) (et peut être le dernier ?)
@+ et merci pour le commentaire
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.