Lister les handles (fichiers, clé de registres,...) ouverts par un programme (nt/2000/xp) en vb.net

Soyez le premier à donner votre avis sur cette source.

Vue 12 177 fois - Téléchargée 1 281 fois

Description

Ce code permet d'obtenir la liste des handles ouverts par un programme :
- fichiers
- sections
- clé de registre
- événement
- mutex
- ...

Ce code permet aussi de recherché un nom de handle dans tous les processus, pour savoir, par exemple, le nom de l'application qui a ouvert le fichier toto.txt... ou une clé de registre, ou un mutex...

Ce code liste aussi les programmes en execution. Il utilise des APIs natives non documentées pour NT/2000/XP non documentées...

Je précise que ce code ne fonctionne PAS pour les PROCESSUS appartenant à SYSTEM, SERVICE LOCAL, SERVICE RESEAU : ces processus ne peuvent être accéder que par du code en mode Kernel et pas par du code en mode User comme VB... pour accéder à ces processus, il faut un driver .sys...

C'est une traduction du code http://www.vbfrance.com/codes/LISTER-HANDLES-FICHIERS-CLE-REGISTRES-OUVERTS-PROGRAMME-NT_25915.aspx

Conclusion :


Pour plus d'infos sur les API Native de Windows NT/2000/XP, regarder le livre "Windows NT/2000 NATIVE API Reference" de Gary Nebbett

Ce code ne fonctionne pas sous 9x/ME.

Certain handle sont nommés, d'autres pas...

N'hésitez pas à commenter et à noter...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

violent_ken
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Brunews parle de l'API Win32.

Pour inclure çà dans du VB.Net faut utiliser le namespace
System.Runtime.InteropServices

et déclarer la fonction comme décrit ici : http://www.pinvoke.net/default.aspx/kernel32/CreateFile.html

Sinon CreateFile c'est bien, mais çà ne permet pas de savoir quel process a ouvert le fichier. Pour connaitre le process, pas le choix, faut énumérer les handles ouverts sur le système et déterminer, en fonction du nom du fichier, quel est le handle concerné pour avoir son ProcessId associé.
@+
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Si je parle API c'est API sinon j'aurais dit autre chose.
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
cs_bidouille007
Messages postés
257
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
22 décembre 2012
1 -
BRUNEWS

Je m'étonne car quand je fais la commande que tu dis, je n'ai pas le choix dans les options de la commande :

File.Create(entree, 0, FileOptions.None)

Sinon filecreate n'existe pas, à moins de faire un imports mais lequel ?

D'avance merci
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
Pas besoin de choses compliquées:
Fais un CreateFile sur le nom de fichier avec 0 en SHARE_MODE et OPEN_EXISING.
Si handle = -1 alors est indisponible.
Sinon CloseHandle et est dispo.
L'API ne déclenche jamais d'erreurs.
violent_ken
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
bidouille007 => Salut, si c'est bien çà, mais il faut regarder les handles ouverts de type "fichier" (file).

Par contre pour éviter l'erreur "fichier occupé par un autre processus", il faudrait fermer le handle ouvert par le process, mais çà risque d'impacter sur son comportement.

@+

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.