Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SAVOIR QUEL FICHIER EST UTILISÉ PAR TELLE APPLICATION : LA LISTE DES FICHIERS OUVERTS SUR LE SYSTÈME (POUR 2K/XP/2K3)


Information sur la source

Catégorie :Système Source .NET ( DotNet ) Classé sous : fichier, fichierouvert, handle, kernel Niveau : Expert Date de création : 26/02/2006 Date de mise à jour : 01/01/2007 20:58:13 Vu / téléchargé: 13 739 / 1 376

Note :
9,25 / 10 - par 4 personnes
9,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


Description

Ce code permet d'avoir la liste des fichiers ouverts sur le système. Il emploie des fonctions non documentées.Il contient un module de classe pour obtenir cette liste.

C'est une version simplifiée et VB.Net de mon code http://www.vbfrance.com/code.aspx?id=25915.
L'application de ce projet pourrait être : quand on ouvre un fichier et que l'on obtient une erreur, on peut afficher l'application qui utilise le fichier actuellement. Le seul problème, c'est que ce code nécessite les droits d'ADMINISTRATEUR...

Si l'on a les droits appropriés (administrateur), on peut obtenir la liste des fichiers ouverts, même des processus système (privilège SeDebugPrivilege).

Le driver est juste là, car, parmi les fichiers il y a les pipes...et le probleme des pipes est qu'ils peuvent créer des deadlocks (blocage dû au fait qu'on attend après une ressource (le pipe) qui ne sera jamais libérée)...Or dans les objets kernels (au sens de structure mais bon c le terme) correspondants aux handles, il y a un membre de la structure dudit objet qui renseigne sur "l'occupation" de l'objet...Mais on ne peut accéder aux objets kernels qu'en mode kernel donc dans un driver...
bref, le driver regarde si un appel à NtQueryObject créera ou non un deadlock :
- si pas deadlock, il appelle ObQueryNameString (<=> NtQueryObject) pour obtenir le nom de l'objet
- si deadlock, il se débrouille avec les pointeurs vers les noms et les objets eux-mêmes pour trouver le nom complet
 

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. Testé sur XP Pro, 2000, 2003. Ne fonctionne pas sous NT4 et Vista.

Le code du driver viendra avec la version C de ce code...

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

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

17 avril 2006 13:51:45 :
Correction du marshaling...
09 août 2006 21:18:32 :
ajout de la fermeture de handle, du filtrage et du code du driver correction de quelques bugs
01 janvier 2007 20:58:13 :
correction pour Vista Business

Commentaires et avis

signaler à un administrateur
Commentaire de Willi le 27/02/2006 00:58:15 administrateur CS

Comme d'habitude.....source vraiment enrichissante et complète
Code excellent, vraiment très bien expliqué !
J'ai hate de voir le code du driver :)
10/10

signaler à un administrateur
Commentaire de TroXsA le 27/02/2006 01:11:53

Bonjour,

Je trouve que c'est tres bien fait ! mais WMI le fait ! avec un System.Management puis suffit de trouver la bonne class WMI qui doit etre Win32_Process

Cordialement

signaler à un administrateur
Commentaire de eldim le 27/02/2006 10:23:57

Perso j'ai mis 10 car source très instructive
(même si elle n'est pas fignolée le niveau mérite une note excellente)

signaler à un administrateur
Commentaire de Willi le 27/02/2006 11:48:26 administrateur CS

TroXsA, je ne pense pas qu'avec Win32_Process des classes wmi ont puissent récupérer quelle application à ouvert tel fichier.

signaler à un administrateur
Commentaire de TroXsA le 27/02/2006 11:51:16

Je releve le defit quand meme :) je vais faire les testes de mon coter et si j'abouti a quel que chose je te fait signe :)

A bientot
@+

www.troxsa.info

signaler à un administrateur
Commentaire de Willi le 27/02/2006 12:40:11 administrateur CS

En tout cas j'ai regardé Win32_Process mais je ne vois pas où l'ont peut avoir ces informations.
Par contre j'avais écrit un code permettant de retrouver les modules utilisés par une application. Mais je n'ai pas vérifié si cela correspondait avec ce que l'on retrouve en utilisant le code de ShareVB.

TroXsA voici surement une autre méthode (c#) :)

public static string[] GetModules(int id)
{
    Process p = Process.GetProcessById(id);
    ProcessModuleCollection pmc = p.Modules;
    
    string[] arrS = new string[pmc.Count];
    int ic = 0;

    foreach (ProcessModule pm in pmc)
    {
        arrS[ic] = pm.ModuleName;
        ic++;
    }

    return arrS;
}

signaler à un administrateur
Commentaire de ShareVB le 27/02/2006 20:15:27

salut,

non, les modules (exe et dll) chargés ne font pas forcement partis des fichiers et handles ouverts (par CreateFile ou autre)...avoir la liste des modules exe et dll mappés dans l'espace d'adressage d'un processus, c'est documenté largement par Microsoft...

par contre, là, il s'agit bien d'avoir la liste des fichiers (image JPEG, document Word, fichier texte...) ouvert par une application...cette méthode n'est pas documentées par Microsoft. :))

Et je pense que des Experts en Windows comme Mark Russinovich et Bryce Cogswell (sysinternals.com), dont un doit avoir accès au code source de Windows, qui ont exposé cette méthode dans leur outils Handle, n'auraient pas oublié WMI dans leur recherches... :))

Enfin, je dis ça parce que moi-aussi, je n'ai rien trouvé dans WMI qui donne cette liste (qui n'est pas celle des modules)...

ShareVB

signaler à un administrateur
Commentaire de Willi le 27/02/2006 21:56:20 administrateur CS

ShareVB j'ai une question concernant les livres, j'ai trouvé ces quelques livres ci-dessous, que peux tu me conseiller ?
Merci

- Windows NT/2000 Native API Reference, par Gary Nebbett (2000)
- Undocumented Windows 2000 Secrets, par Sven Schreiber (2001)
- Win32 System Programming (3rd Ed), par Jonhson Hart (2004)
- Windows Internal (4th Ed), par David Solomon et Mark Russinovich (2005)

signaler à un administrateur
Commentaire de TroXsA le 27/02/2006 21:57:01

Bonjour,

Donc je pense avoir trouver une petite piste quand meme, mais j'ai fait ça tres vite fait sa fonctionne plus ou moins bien
___________________________
        Dim ps As Diagnostics.Process
        Dim value As ProcessModuleCollection

        For Each ps In Diagnostics.Process.GetProcesses(".")
            Console.WriteLine(ps)
            value = ps.Modules()
            For i As Integer = 0 To value.Count - 1
                Console.WriteLine(value.Item(i))
            Next
        Next ps

_________________

Je sais pas trop si c'est bien sa qui corespond, mais en tout cas ça donne des idées, puis je vais aller voir du coté wmi voir si y a plus simple

A bientot



www.troxsa.info

signaler à un administrateur
Commentaire de BruNews le 27/02/2006 22:14:32 administrateur CS

willi > le 1er et dernier de ta liste sont des références incontestables mais gaffe que ces bouquins sont tout en C.

signaler à un administrateur
Commentaire de Willi le 27/02/2006 22:23:55 administrateur CS

Merci brunews pour l'info :)
Il est évident que l'ont ne retrouve pas de vb dans ces livres :D

signaler à un administrateur
Commentaire de ShareVB le 28/02/2006 19:47:50

salut,

willi>
-> Windows NT/2000 Native API Reference : c'est une liste de fonction un peu comme MSDN...très bien fait, très pratique et très technique...un must...

-> Undocumented Windows 2000 Secrets : vu le sommaire, il doit être technique et assez complet...
-> Win32 System Programming (3rd Ed) : vu le sommaire, c'est un MSDN en livre avec plus d'exemples mais surement peu de choses non documentées

-> Windows Internal : je trouve qu'il manque (dans l'édition que j'ai lue) de concret...les concepts et fonctionnements internes de Windows sont très détaillés sans vraiment beaucoup de code et très peu de prototypes...un must pour comprendre, mais à mon avis pas pour coder...

troxsa>
ceci ne donne la liste que des modules qui compose une application et pas la liste de ces fichiers ouverts (issus de la liste des handles ouverts (clés de registre, fichiers, fichiers mappés, mutex, events...)). Bien que les modules est un handle (qui leur adresse de mappage dans le processus), ces handles ne sont du même type que ceux des fichier ouverts...

ShareVB

signaler à un administrateur
Commentaire de OneHacker le 05/04/2006 17:21:01

TroXsA, on te parle de lister des fichiers pas des Modules.

La source est bien ! 10/10.

Bonne continuation !

Redman

signaler à un administrateur
Commentaire de draluorg le 15/04/2006 13:41:40

Salut a tous,

Arf snif ca plante apres 2 ou 3 raffraichissement :)

J'ai pas encore reussi a isoler l'erreur car ca plante sans prevenir et sans message d'erreur, et dans l'ide je n'ai aucun soucis ca marche impec... ~|

J'utilise VBExpress 2005, sous XP SP2, si quelqu'un a une piste ?

Sinon n'y a t'il pas un moyen un peu plus .net d'enumerer les handles ?
Car ca plantait avec la version vb6 aussi... (meme le code de EbArtSoft)

Bonne prog a tous
++

signaler à un administrateur
Commentaire de ShareVB le 17/04/2006 13:52:06

salut,

voilà une version qui ne semble pas planter aavec VS2003 et VB2005...
le problème je pense était l'utilisation de VarPtr qui en fait ne peut pas exister en VB.Net...

pour ce que tu dis du code vb6...j'ai pas compris de quoi tu parles...

ShareVB

signaler à un administrateur
Commentaire de draluorg le 17/04/2006 14:12:30

Salut SahreVB,

Merci je vais tester ca :)

Pour vb6, je voulais dire que tu avais deja poste une source simillaire, et EbArtsoft aussi, mais chez moi les 2 codes crachaient completement :(

++

signaler à un administrateur
Commentaire de draluorg le 18/04/2006 01:32:08

Re,

En effet c'est beacoup plus stable, encore quelques ptites erreurs notement des violation access en quittant l'appli..

Sinon je ne recupere aucune cles ouverte mais seulements des fichiers et des dossiers, est-ce normal docteur ? pcq je vois la fonction pour "convertir" le noms de cle...

Encore merci
++

signaler à un administrateur
Commentaire de ShareVB le 18/04/2006 09:08:14

salut,

les violations d'accès en .Net c'est un peu bizarre...es-tu sûr de ne pas avoir une version beta de VB...

euh oui, c'est normale, c'est une version spécialisée d'un autre code qui lui liste tous les handles...je vais ajouter la fonctionnalité de fermeture de handle bientôt...

pour le code VB6, c'est bizarre parce que celui-ci c'est une stricte traduction du code VB6...es-tu sûr d'avoir la dernière version...et à l'occassion ca fait quoi...

ShareVB

signaler à un administrateur
Commentaire de draluorg le 18/04/2006 14:18:42

Salut,

he je ne pense pas que ce soit une beta mais c'est la version d'evaluation VBExpress 2005...

Et en effet c'est surement une des causes de mes problemes, car si VB est fermer, je n'ai plus aucune erreur... bizarre...

Sinon pour Vb6(Version US) j'avais soit le probleme de l'appli bugee et inKillable, soit un crach complet sans avertissement.

Ceci dit, je viens de voir que tu avais fais une mise a jour en fevrier, donc non je n'ai pas la derniere version, mais c'est apparement une mise a jour pour Win2000...

++

signaler à un administrateur
Commentaire de ShareVB le 09/08/2006 21:23:51

salut,

en retestant j'ai constaté que le deboggueur de VBExpress 2005 est lent comme un escargot...donc le mieux c'est de lancer l'exe dans le dossier bin\ (ou Ctrl-F5 dans vb)

je rappelle aussi que si vous utilisez le bouton STOP de VB alors le driver ne pourra pas être déchargé avant le prochain démarrage (car son handle ne sera jamais fermer) et donc source d'erreur...

ShareVB

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Taille d'un fichier [ par jubeau ] Bonjour tout le monde, j'ai ce script : $handle = opendir("ban"); while (($file = readdir())!=FALSE) { clearstatcache(); if($file!=".." && $fi Trouver le path complet d'un fichier a partir de son handle [ par Joke758 ] Bonjour, j'ai besoin d'aide pour trouver le chemin complet d'un fichier avec son handle/process  id.Merci! Tester la connection d'un imprimante [ par niluje ] HelloVala le pb :sDans mon appli je test si des imprimantes sont connectées (imprimante LPR par adresse IP définies ds le prog et non les print défini accès aux champs d'un fichier exe [ par david003 ] salut à tous,je vous envoi ce message car j'ai un petit problème, je dois accèder à des champs d'une application dèjà compilée afin de faire un traite Charger une ListBox de mon projet à partir d'un Fichier.text du même projet [ par KIPRE74 ] Bonjours à tous Voici la situation : 1- j'aimerais qu'au lancement de mon projet la liste des objet de mon fichier.txt du projet soit copier dans une ouverture d'un fichier en extension VBG [ par muratet ] Bonjour, j'essaye d'ouvrir un fichier avec l'extension .VBG mais je n'y arrive pas. ai-je besoin d'une application spécifique?merci de m'orienter.<fon récuperer des données dans un fichier texte [ par tomtom et nana ] Bonjour, Voila je doit faire une fonction qui traite des fichiers texte, apparamenrt sous unix il y'a l'outils awk qui fait exactement ce que je veux PB d'onglet sur feuille excel [ par justin92330 ] Bonjour tout le monde,Je me permet de vous embeter car j'ai un pb qui me casse la tete depuis un petit moment...Je vais essayer d'etre clairJ'ai un fi ouverture fichier zip [ par tubo01 ] j'ai telecharger le logiciel (encombremment coude 3d ) dans zip . je n'arrive pas a ouvrir le logiciel que dois-je faire ? Boucle en vb6 [ par lisco ] Bonjour,J'ai un fichier excel qui fait 50 000 lignes et j'ai fait une boucle qui me compare toutes les lignes de mon fichier pour copier et coller les


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.