begin process at 2012 02 16 22:54:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > OBTENIR LES PLAGES MÉMOIRE UTILISÉES PAR UN PROCESSUS DANS LA MÉMOIRE VIRTUELLE

OBTENIR LES PLAGES MÉMOIRE UTILISÉES PAR UN PROCESSUS DANS LA MÉMOIRE VIRTUELLE


 Information sur la source

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :virtualqueryex, mémoire, virtuelle, plage, region Niveau :Initié Date de création :03/11/2006 Vu / téléchargé :3 966 / 458

Auteur : violent_ken

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 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/memoirevirtue lle.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

Les Membres Club peuvent 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

Source avec Zip Source avec une capture Source .NET (Dotnet) UTILITAIRE DE SANITIZATION DES DISQUES DURS/FICHIERS (SUPPRE...
Source avec Zip Source avec une capture Source .NET (Dotnet) SIMPLE SHUTDOWN SCHEDULER : ARRÊTS PLANIFIÉS (LOCAL OU REMOT...
Source avec Zip Source .NET (Dotnet) COMMENT DÉMARRER UN PROCESSUS SUR PC DISTANT DE MANIÈRE CACH...
Source avec Zip Source avec une capture Source .NET (Dotnet) YET ANOTHER (REMOTE) PROCESS MONITOR
Source avec Zip Source avec une capture Source .NET (Dotnet) COMMENT DÉTECTER LES PROCESSUS CACHÉS (VIRUS, ROOTKITS...) +...

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE MÉMOIRE CLASSIQUE par raffika
FONCTION SOMME EN MACRO EXCEL par xgluk
Source avec Zip Source .NET (Dotnet) GABSCREENSHOT : FAITES SIMPLEMENT ET RAPIDEMENT VOS CAPTURES... par GabSoftware
Source avec Zip Source avec une capture Source .NET (Dotnet) STORMDATACENTER - DÉMO DE WEBBROWSER MULTIFONCTION VB9 NAVIG... par LightningStrike
Source avec Zip Source .NET (Dotnet) [VB 2008] MEMONAB par Kite37

Commentaires et avis

Commentaire de Le cancre le 03/11/2006 12:06:11

merci pour cette source ^^

Commentaire de violent_ken le 03/11/2006 12:08:51

De rien ;)

J'ai pensé que donner quelques morceaux de mon projet avant le projet lui même (cf FileView) pourrait être utile, content que çà te serve ^^


@+

Commentaire de Mayzz le 03/11/2006 13:41:58

violent_ken c'est pas mal ça de décomposer un prj en cours de construction pour en présenter le code. Ca permet de ne pas avoir à chercher dans une source, c'est mieux je trouve. De plus quand tu présenteras ta source complète on aura déja vu une partie dc pr la commenté ce sera plus simple =) Gare à ta note loool.

Reste juste à savoir ce qu'en pense les admins...

Commentaire de violent_ken le 03/11/2006 13:51:38

Salut, bah, disons que par exemple, il aurait été difficile de trouver ce morceau de code en voyant une source intitulée "Editeur Hexadécimal".

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

Commentaire de Mayzz le 03/11/2006 16:34:14

Non en fait moi je trouve ca bien, pour toutes les raison que tu a énumérés ci-dessus, pour ce qui est des admins... je me posais la question mais c'étais personnel maintenant si ce ne leurs pose pas de problèmes je pense juste que plus de monde devrait suivre ta méthode ^^

Bonne prog ++

Commentaire de MadM@tt le 03/11/2006 20:19:18

Salut !

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 ;)

Commentaire de econs le 03/11/2006 21:10:16 administrateur CS

Les raisons que tu présentes sont tout à fait valables. Tant que les mini projets (avec mise en situation) peuvent être considérés comme des sources, c'est effectivement plus facile à retrouver dans le moteur de recherches.
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.

Commentaire de violent_ken le 03/11/2006 21:22:46

Mayzz ==> Merci ^_-

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.

@+

 Ajouter un commentaire


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 Mémoire Virtuelle d'un Process (Virtual Memory) [ par u147078 ] Bonjour, Je cherche à récuperer la Mémoire Virtuelle d'un Process donné. J'ai essayé la fonction GetProcessMemoryInfo de la Lib "PSAPI.DLL" , mais le [Déplacé VB6 --> VBA] EXCEL : recherche de la couleur d'une cellule dans une plage et n° ligne et colonne [ par Herve34600 ] Bonjour, Je suis novice de VBA [^^sad1] et je souhaiterais avoir une fonction supplémentaire qui me permettrait d'utiliser la couleur d'une cellule p [A SUPPRIMER]mémoire [ par electrobone ] slt je suis nouveau ici , iben je cherche des thèmes de fib d'études sur la gestion de maintenance industrielle ou une documentation sur la gestion de plage vers tableau en VBA/Excel [ par ucfoutu ] Bonjour, [u]Liminaire[/u] : mes interventions sur VBA/Excel pourraient donner à penser que je suis déjà "avancé" dans ce domaine. Il n'en est rien ! Erreur "3434" Impossible d'agrandir la plage nommée [ par Calade ] Bonjour à tous, Devant rendre quotidiennement un certain nombre d'états pleins de chiffres dont les données brutes résident dans des SI pro', j'extra EFFECTUER UNE RECHERCHE DANS UNE PLAGE DE CELLULES EXCEL [ par winvsmac ] Bonjour à tout le monde Voici sur quoi je me creuse les méninges depuis un petit moment, mais je n'arrive pas à trouver de solution. Ceci concerne du enregistrement de plage de données excel --> fichier texte [ par jeanjeuv ] Bonjour, Je suis débutant en VBA Excel, je cherche à créer une macro qui me permettrait d'enregistrer une plage de données excel sous plusieurs fichie créer plage horaire dans slider en vb6 [ par ja67 ] bonjour, pourriez-vous m'indiquer comment avec vb6 créer une plage horaire (du type 8:00,8:15,8:30....) dans un slider;apparemment, le slider n'accept Bug... [ par pochelu ] Bonjour, Je suis novice en vba. J'ai besoin de votre aide. J'ai écris un petit programme qui doit calculer la valeur d'un zéro coupon à partir de di


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales