MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
3 sept. 2006 à 18:04
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
4 sept. 2006 à 14:26
Salut à tous,
Voilà je voulais juste lister les modules (des processus) qui tournent sur mon pc, rien de bien méchant.
Seulement, ça marche pas, tout au début : voici le début du code
avec ProcessID bien égal à l'id d'un process (pas de doute la dessus) et TH32CS_SNAPMODULE bien égal à 8, pas de doutes non plus.
Et après l'appel, hSnapShot = -1, donc derrière l'énumération des modules ne marche pas...
Je me suis dit que ça venait peut etre d'une question de privilèges, alors j'ai rajouté un appel à la fonction suivante avant CreateToolhelpSnapshot :
'autorise le privilège SeDebugPrivilege
Public Sub EnableDebug()
Dim hProc As Long 'handle du processus actuel
Dim hToken As Long 'handle du token
Dim mLUID As LUID 'LUID du privilège
Dim mPriv As TOKEN_PRIVILEGES 'privilèges
Dim mNewPriv As TOKEN_PRIVILEGES 'nouveaux privilèges
'renvoie le processus actuel
hProc = GetCurrentProcess()
'ouvre le token
OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
'regarde la valeur du privilège
LookupPrivilegeValue "", "SeDebugPrivilege", mLUID
'nombre de privilèges
mPriv.PrivilegeCount = 1
'attribut ENABLED
mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
'LUID de privilège
mPriv.Privileges(0).pLuid = mLUID
'ajuste le token
AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
'fermer le handle de token
CloseHandle hToken
End Sub
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 sept. 2006 à 12:10
Arff ça marche, pourtant j'avais aussi essayé de tester un code aussi simple mais ça n'avait pas marché non plus. En fait ça vient de la déclaration de l'api, ma déclaration qui marchait pas c'était ça :
Public Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Et pourtant, VB n'indiquait aucune erreur, et pour le listing des process ou des threads ça marche bien, je ne comprend pas. (note : je suis bien en option explicit)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 4 sept. 2006 à 13:07
Ah par contre je sais pas si tu as la réponse, mais en listant les modules je me rend compte qu'ils ont tous leurs ModuleID=1
Donc en gros je sais pas comment je pourrais les identifier (leur trouver un identifiant unique), il y a hModule mais je ne sais pas si c'est unique, et qu'est ce que signifie cette valeur.
Le type Module :
'des infos sur les modules
Public Type MODULEENTRY32
dwSize As Long 'taille de cette structure (à initialiser avant l'appel à Module32First ou Module32Next)
th32ModuleID As Long 'ID du module
th32ProcessID As Long 'ID du processus qui utilise le module
GlblcntUsage As Long 'compteur d'usage global pour toutes les instances présentes dans la mémoire du système
ProccntUsage As Long 'commteur d'usage du module pour le processus
modBaseAddr As Long 'adresse de début du module en mémoire
modBaseSize As Long 'taille du module en mémoire
hModule As Long 'HMODULE du module
szModule As String * 256 'nom du module
szExeFile As String * MAX_PATH 'chemin du module
End Type
Si t'as une idée, merci d'avance ;)
Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 sept. 2006 à 14:26
ByRef étant par defaut, en VB6, sans le ByVal, pout Windows, ce que tu luyi transmets, c'est l'adresse (pointeur) de l'endroit où se trouve le pid, et non le pid lui même.
* th32ModuleID : <dd>This member is no longer used, and is always set to one.
et pour le hModule :
* hModule : <dd>Handle to the module in the context of the owning process.
le coté 'in the context of the owning process' ne nous aide pas pour nous en servir comme identifiant.