Process thread mémory...

cs_nicolas12 Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 4 août 2003 - 1 août 2003 à 10:56
cs_nicolas12 Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 4 août 2003 - 4 août 2003 à 18:00
bonjour a vous

je cherche à lire et a stoquer sous forme de fichier toutes les plages mémoires qu'une application utilise, et a modifier automatiquement ces fichiers lorsque certaines données stoquées en mémoire se modifie du faite de la manipulation de l'application.

actuellement j'ais trouver beaucoup de code concernant le lancement par api de process, donc ca je sais à peut pres le faire...
mais pour lire toutes les données mise en mémoire par une application spécifique la je trouve pas de code.

pour vous donner un exemple lancez l'outils qui est installé avec VB6 et s'appellant "Process Viewer"
on y vois la liste des process puis celle des threads puis en dessous pour chaque thread l'adresse mémoire..
bon j'avoue ne pas bien cerner dans ce cas ce que c'est que un threads mais c'etait un exemple...

donc comment je puis faire pour mener à bien mon projet?

svp aidez moi

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 août 2003 à 11:15
http://perso.wanadoo.fr/persans-brunews/
JR4.zip et JR4Sources.zip
Commence par lire Richter, bouquin complet en chm dans le zip. Bien entendu tout le code exemple est en C, normal pour la prog systeme. Tu sauras tout sur thread, processus, objets du noyau etc... Tu verras a la finale si est possible en vb.
BruNews, ciao...
0
cs_nicolas12 Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 4 août 2003
1 août 2003 à 15:00
hum c'est lien marche t'il vraiment?

j'y connais pas trop en api et encore moins en C donc si vous auriez du code VB pour ke je puisse tester ca m'arangerais... merci
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 août 2003 à 15:04
ben non, la prog systeme ne se fait pas en vb normalement.
BruNews, ciao...
0
cs_nicolas12 Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 4 août 2003
4 août 2003 à 18:00
bon le peut d'info que j'ais réussi à trouver m'a permis pour l'instant d'ecrire ce code (à inserer dans une form):

Option Explicit

Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Sub Form_Load()
   Dim StrClassName As String
   Dim strWindowName As String
   Dim lngIdWindow As Long
   Dim lngProcessId As Long
   Dim lngProcessHandle As Long
   Dim LngBoucle As Long
   Dim lngMaxMemoire As Long
   Dim lngAdresseMemoire As Long
   Dim LngBuffeur As Long
   Dim strBuffeur As String
   
   'je ne m'interresse pas à la class mais au nom de la fenètre
   StrClassName = vbNullString
   
   'récupération du nom de la fenètre voulu
   'moyen rapide pour le dev:
   strWindowName = "WinZip (Evaluation version)"
   'moyen avec action de l'utilisateur
'   strWindowName = InputBox("Titre")
   
   'récupération de l'id de la fenètre (souvent appelé hwind)
   lngIdWindow = FindWindow(StrClassName, strWindowName)
   
   'récupération du "process Id" de la fenètre
   GetWindowThreadProcessId lngIdWindow, lngProcessId
   
   'récupératon du handle du process
   lngProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lngProcessId)
   
   'récupération de la taille de la mémoire utilisé pour cette tache
   lngMaxMemoire = 10000 'la je ne sais pas comment optenire cette valeur
   'la valeur que je met est totalement fausse et competement subjective
   
   'récupération de l'adresse de démarrage de la mémoire (souvent codé en exadecimal)
   lngAdresseMemoire = 0 'la je ne sais pas comment optenire cette valeur
   'la valeur que je met est totalement fausse et competement subjective
   
   'lecture de la mémoire concernant ce process
   For LngBoucle = 1 To lngMaxMemoire Step 2
       
      'lecture Byte à Byte de la mémoire que l'on stock dans LngBuffeur
      ReadProcessMemory lngProcessHandle, lngAdresseMemoire + LngBoucle - 1, LngBuffeur, 1, 0&
      
      'convertion du buffeur en chaine de caractère
      strBuffeur = strBuffeur & Chr(LngBuffeur)
   Next
   
   'affichage du buffeur
   Debug.Print strBuffeur
   
   'apres avoir ouvert le proccess je le ferme (ce n'est pas une fermeture de l'application)
   CloseHandle lngProcessHandle
   
   'fermeture de la form
   Unload Me
End Sub


de ce code apparait 2 variable que je ne sait absolument pas initialiser à des valeurs correcte:
* lngMaxMemoire
* lngAdresseMemoire

auriez vous des infos me premettant de le faire?

sinon si vous avez des commentaire sur le code n'hesitez pas lachez vous :p
0
Rejoignez-nous