Pb avec VirtualFreeEx

benoithenry Messages postés 14 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 15 octobre 2003 - 24 sept. 2003 à 10:41
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 16 oct. 2003 à 13:42
Bonjour,
je ne comprends pas pourquoi ce code ne marche pas :

hW = GetDesktopWindow

Call GetWindowThreadProcessId(hW, PID)

AllocMemory = OpenProcess(PROCESS_ALL_ACCESS, False, PID)

R_buf = VirtualAllocEx(AllocMemory, ByVal 0, MAX_PATH, MEM_COMMIT, PAGE_READWRITE)

VirtualFreeEx(CLng(AllocMemory), CLng(R_buf), 0, MEM_RELEASE)

CloseHandle (AllocMemory)

En fait Virtualfreeex Renvoie toujours 0 -> erreur 87 The parameter is incorrect.

Je ne vois pas ou il pourrait y avoir une erreur
Merci de m'aider !!

Benoît

11 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2003 à 11:15
Dim rbuff As Long
rbuff = VirtualAlloc(0, MAX_PATH, MEM_COMMIT + MEM_RESERVE, PAGE_READWRITE);

VirtualFree(rbuff, 0, MEM_RELEASE);
BruNews, ciao...
0
benoithenry Messages postés 14 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 15 octobre 2003
24 sept. 2003 à 14:25
En fait j'écris dans explorer avec WriteProcessMemory a l'interieur de ce code, je suis donc obligé d'utiliser VirtualallocEx pour réserver une zone de mémoire explorer.
Mais ce virtualfreex ne veut pas marcher...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2003 à 14:43
pourquoi tu mets des CLng sur AllocMemory et R_buf ?
BruNews, ciao...
0
benoithenry Messages postés 14 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 15 octobre 2003
24 sept. 2003 à 14:59
c'est pour convertir les adresses en long ( c vrai que ca ne sert pas a grand chose). je les ai enlevé mais ca rien !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2003 à 15:03
AllocMemory = VirtualAllocEx...
tu as bien teste que AllocMemory <> 0 ?
BruNews, ciao...
0
benoithenry Messages postés 14 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 15 octobre 2003
24 sept. 2003 à 16:07
allocmemory est bien <> 0... tu veux que je t'envoie le source car vraiment je voi pas !!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2003 à 16:23
desole mais moi c'est en C.
Tu peux parfaitement ecrire dans un autre processus en utilisant VirtualAlloc, c'est le 1er param de WriteProcessMemory qui sert a l'indiquer.
BruNews, ciao...
0
benoithenry Messages postés 14 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 15 octobre 2003
24 sept. 2003 à 17:07
mon programme sert a deplacer des icones sur le bureau en les recherchant par leur nom.
J'ai essayé en utilisant virtualalloc mais ca ne marche pas. Aucune des icones ne bouge.
Merci d'avoir essayé de m'aider mais apres 2 jours que je cherche ca me monte a la tete...
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
12 oct. 2003 à 11:46
salut

bon merci d'avoir reposer le pb mais J'AI TROUVE LA SOLUTION :)))))))

Public Const MEM_RELEASE As Long = &H8000&
Public Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Public Const SYNCHRONIZE As Long = &H100000
Public Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
Public Const MEM_COMMIT As Long = &H1000&
Public Const PAGE_READWRITE As Long = &H4&
Public Const MAX_PATH As Long = 255&
Public Const PAGE_EXECUTE_READWRITE = &H40&
Public Const MEM_RESERVE = &H2000&
Public Const PROCESS_VM_OPERATION As Long = &H8&
Public Const PROCESS_VM_READ As Long = &H10&
Public Const PROCESS_VM_WRITE As Long = &H20&
Public Const PROCESS_VM As Long = (PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE)

Public Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Public Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long

hW = GetDesktopWindow

Call GetWindowThreadProcessId(hW, PID)

AllocMemory = OpenProcess(PROCESS_VM, False, PID)

R_buf = VirtualAllocEx(byval AllocMemory, ByVal 0&, MAX_PATH, MEM_COMMIT Or MEM_RESERVE, PAGE_READWRITE)

VirtualFreeEx(byval AllocMemory, byval R_buf, 0&, MEM_RELEASE)

CloseHandle (AllocMemory)

la solution etait pourtant simple et fallait y penser :
pour ce ^$ùù$^$ de VB qui travaille avec les entiers signés &h8000 = -32767 et non 32768
alors que &h8000& = 32768
ce qui fait que virtualfreeex renvoie 0 car MEM_RELEASE n'etait pas égal à 32768 (8000h) mais à -32767 (FFFF8001h complement à 2)

a la la sacré VB...

le prb c que suite à une mise à jour ma source n'est plus disponible (il y a un message d'erreur a la place)...

voila

ShareVB
0
benoithenry Messages postés 14 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 15 octobre 2003
15 oct. 2003 à 19:28
Es tu sur que c'est la cause de notre probleme?
Car malgres mes modif, le programme continu a ne pas libérer la mémoire...
Benoît
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
16 oct. 2003 à 13:42
salut

oui chez moi ca fonctionne tres bien maintenant.

le zip corrigé est disponible à :
http://perso.wanadoo.fr/sharevb/Bureau.zip

car il n'est pas disponible sur le VBFrance pour le moment suite à un prb

voila

ShareVB
0
Rejoignez-nous