SAVOIR QUEL FICHIER EST UTILISÉ PAR TELLE APPLICATION : LA LISTE DES FICHIERS OU

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 21 févr. 2005 à 09:41
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 2 nov. 2011 à 21:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29671-savoir-quel-fichier-est-utilise-par-telle-application-la-liste-des-fichiers-ouverts-sur-le-systeme-pour-nt-2k-xp

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
2 nov. 2011 à 21:41
Sorry for the delay, the only document I used was http://msdn.microsoft.com/en-us/windows/hardware/gg487358 but in your case, porting to x64 may involve finding another method because some kernel memory changes are not allowed

ShareVB
iksanrambia Messages postés 4 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 4 octobre 2011
4 oct. 2011 à 06:01
Cool ShareVB! Do you have any references about how to make x64 version from x32 version? Actually, I use a driver to hook process creation but it doesn't work in x64 machine so I will learn you latest code.
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
28 sept. 2011 à 00:45
A working version on x64 is available (however in test signing because I have no certificate to sign the driver)

ShareVB
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
18 sept. 2011 à 23:28
To allow to run this code on x64, modification of Delphi and Driver code along to run your x64 OS in testsigning...but I did it on VB.Net verson of this code and will do it soon on this version

ShareVB
iksanrambia Messages postés 4 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 4 octobre 2011
13 sept. 2011 à 09:52
If I want to make this code run under x64, what should i do, compile the .pas with Delphi XE2 or only modifying the .c file?
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
11 sept. 2011 à 12:37
salut NJulio,

Ce code fonctionne maintenant sous Vista et Seven avec les derniers SP, requiert "Run as administrator". Si la liste reste vide, il faut exécuter la ligne de commande "sc delete KernelMemory" depuis un cmd avec les droits admins

Par contre, ce code ne peut pas fonctionner sous x64.

ShareVB
njulio Messages postés 21 Date d'inscription mardi 13 septembre 2005 Statut Membre Dernière intervention 16 août 2011
16 août 2011 à 17:34
Mais avec Window 7 et vista, la liste est vide
njulio Messages postés 21 Date d'inscription mardi 13 septembre 2005 Statut Membre Dernière intervention 16 août 2011
30 juil. 2011 à 22:13
Je crois avoir trouvé la solution. Au lieu de supprimer la clé KernelMemory de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services... regardez plutôt le chemin à l'intérieur de la clé
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KernelMemory\ImagePath et copiez le fichier KernelMemory.sys à cet endroit. C'est ce que j'ai fait et ça marche correctement.
njulio Messages postés 21 Date d'inscription mardi 13 septembre 2005 Statut Membre Dernière intervention 16 août 2011
29 juil. 2011 à 21:46
Ce code marchait correctement l'an dernier quand j'ai téléchargé. Aujourd'hui je ne comprends pas pourquoi ce dernier ne fonctionne pas. Alors que je ne vois pas de difference.
iksanrambia Messages postés 4 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 4 octobre 2011
28 déc. 2009 à 09:25
Anyone please how to run this source code in newest Delphi, it makes crush in Windows.

Thanks..
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
8 mai 2007 à 11:50
bonjour,

j'ai constaté que a chaque fois qu'on actualise la liste des fichiers ouverts, la taille du processus du programme augmente considérablement, sauriez-vous comment faire pour qu'elle n'augmente pas a chaque fois ?
j'ai essayé op.Free; mais ça ne marche pas :(

merci
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
29 janv. 2007 à 10:51
même problème toujours plantage mais maintenant le file type est bien positionné à 26.

J'ai regardé côté driver et celui-ci ne se lance pas, le start du service retourne une 1060 (service pas lancé). Le CreateFile du KernelMemory retourne un handle à zéro.

Ce qui est bizarre c'est que lancé depuis Delphi ça plante, mais si l'exe est lancé directement pas de plantage mais liste des fichiers vide.

La clé de registre KernelMemory ne se recrée pas si je la supprime.

A tout hasard j'ai copié le driver dans /system32/drivers ... pas mieux. Je suis loggé admin donc aucun problème de droits.

En fait dès le premier CreateService ça ne marche pas, handle=0, donc forcément le reste ne va pas. Il faut que je comprenne ce qui peut l'enpêcher de se créer. GetLastError me dit que le service est déjà créé alors que j'ai supprimé lé clé, mais je vois un \HKLM\System\CurentControlSet\Enum\Root\LEGACY_KERNELMEMORY que je ne peux pas supprimer.
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
28 janv. 2007 à 11:13
salut,

dsl du retard, mais ca devrait être corrigé (j'ai testé sous 2K et ca marche)...si ca ne marche pas du premier coup :
supprime la clé KernelMemory de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services...

ShareVB
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
13 janv. 2007 à 01:50
Sinon je suis étonné que dans cette fonction GetObjectTypeNumber il n'y ai pas de Result défini autre que dans bloc "bug Win2K", je ne vois que :

//si elle correspond au nom recherché
If WideCompareStr(strTypeName,strType) = 0 Then
begin
//le numéro de type d'objet est l'index dans la liste de type + 1
GetObjectTypeNumber := X + 1;
//on a fini
Exit;
end;

qui fait quitter la fonction mais sans assigner aucun Result.

En ligne 7xx j'ai donc tenté de changer :

m_ObjectTypeNumber := GetObjectTypeNumber('File');

avec => m_ObjectTypeNumber := 26;

car sinon on obtient toujours zéro, mais ça plante toujours.
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
13 janv. 2007 à 01:40
Sinon le plantage se fait au bout de 9 boucles (nombre fixe chez moi) sur un closeHandle(hHandle) en ligne 553 qui obtient un numéro de handle assez énorme de 1244332 après une série de 876 (ce qui me semble un numéro plus raisonable).
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
13 janv. 2007 à 01:35
et il faut enlever la ligne située juste après :

//si on arrive ici, c'est que le type n'a pas été trouvé, alors 0
Result := 0;

car sinon on a toujours 0, en Delphi le Result ne quitte pas fonction, il ne fait que lui assigner une valeur de retour qui peut changer plusieurs fois dans la fonction jusqu'à la fin ou jusqu'à un Exit.
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
13 janv. 2007 à 01:31
Marche pas...plantage sous 2K en ligne 553 sur un closeHandle.

Le partie "bug 2K" est fausse car le test ne reussi jamais, je l'ai corrigée (simplifiée) mais c'est pas mieux :

//si windows 2000 alors bug : NtQueryObject ne renvoie que 23 types au lieu de 26
If strTypeName='Driver' Then
result := 24
else if strTypeName='IoCompletion' then
result := 25
else if strTypeName='File' then
result := 26;
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
12 janv. 2007 à 21:04
mise à jour théorique pour 2K et Vista...

ShareVB
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
8 janv. 2007 à 11:09
Bon je n'ai plus le problème de chaînes erronées mais dans la liste des objets j'ai plein de types sauf 'File' ce qui explique qu'il n'affiche rien :

Type
Directory
SymbolicLink
Token
Process
Thread
Job
Event
EventPair
Mutant
Callback
Semaphore
Timer
Profile
WindowStation
Desktop
Section
Key
Port
WaitablePort
Adapter
Controller
Device
dodfr Messages postés 51 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 27 décembre 2014
8 janv. 2007 à 10:30
Bonjour,

J'ai essayé le code Delphi mais il ne fonctionne pas, j'obtient zéro entrée dans la liste (j'ai bien les droits admin), j'ai tracé un peu et il semble qu'il y a un problème dans la routine qui récupère la liste des noms d'object (celle qui va associer "File" au bon numéro d'objet qui peut varier selon les version de Windows).

Dans la boucle qui parse les différents noms obetnus par NtQueryObject=>ObjectAllTypesInformation, la fonction qui pose problème est :

strType := WideCharLenToString(TypeInfo.Name.Buffer, TypeInfo.Name.Length div 2);

Celle-ci retourne des chaines incorrectes, tantôt elle tronque, tantôt elle est trop longue et ajoute des caractères parasites en bout de chaîne.

Avez-vous eu le même problème ?
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
16 août 2006 à 21:52
salut,

petite précision : le critère ne gère pas les wild chars, c'est juste un Instr...de plus la version Delphi n'est pas à jour par rpt à celle VB...

pour les livres, ceux de la source VB conviennent parfaitement...

ShareVB
cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
16 août 2006 à 19:48
Salut, j'avais testé la version vb sans succes a cause d'un ocx, je viens de retenter a l'instant et ca maintenant ca marche ! (y'a longtemps que je cherche plus a comprendre lol ).
Enfin ca marche plus ou moins :

Le fichier que je voulais liberer l'a bien ete, mais apres avoir rafraichit il est tjrs dans la liste !
Pas trop capté comment marche le "critere de recherche" .. j'ai mis : *un_dossier_du_path_du_fichier*
il affiche aucun fichier, normalement il est sensé complete a gauche et a droite grace aux etoiles ?!

Bon sinon je viens de tester la version delphi (sinon, je serais pas la :) ) et ca ne marche pas :( snif
Et le bouton "Critere de recherche" n'est plus là. J'aurais peut etre pu l'ameliorer :(

Bref j'ai vu quelques une de tes sources, apparement t'es a fond dans le windows, API etc ..
Tu conseilles quoi comme bouquin pour commencer (et faire des prog comme celui ci et comme ceux de sysinternal quand je serais chaud :p ) ? Celui que t'a cite sur la source en vb ?

Bon ben j'attend avec impatience une version qui marche en delphi (win XP) :p ... en plus je prefere largement le delphi au vb

Merci bcp pour cette sources utiles
+10
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
1 mars 2005 à 09:32
Tu as raison. C'est juste que ton code ne marche pas avec 98 parce qu'il manque une DLL. En ce qui concerne, SysInternals propose effectivement d'autres produits tout à fait convenables. Ta précision était tout à fait pertinente...

Précision à apporter vis-à-vis de «A exécuter dans un emplacement définitif». Si vous utilisez des raccourcis pour pointer sur FilMon par exemple, il faut dans le raccourci que le dossier de travail soit celui de l'application. C'est ça qui faisait planter...
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
27 févr. 2005 à 10:18
salut,

l'utilitaire qui ressemble le plus à mon code c'est quand même handle :
http://www.sysinternals.com/ntw2k/freeware/handle.shtml

ShareVB
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
26 févr. 2005 à 22:28
Evidemment, on ne peut pas s'empêcher de citer ceci:
http://www.sysinternals.com/ntw2k/source/filemon.shtml

A exécuter dans un emplacement définitif ! A moins qu'ils n'aient changé la version... Ils sont en 6.12 maintenant et moi en 6.07.
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
22 févr. 2005 à 21:18
salut,

as-tu les droits d'administrateur sur ta machine...si oui, c'est vraiment bizarre...si non, c'est normal tu ne peux pas charger le pilote et donc pas obtenir les noms de fichiers...

ShareVB
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
22 févr. 2005 à 11:30
Hello,

et bien ecoute je viens d'essayer et c'est ok le programme demmarre bien mais il ne m'affiche aucun fichier d'ouvert alors que j'en ai???

++,
JMP77.
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
21 févr. 2005 à 19:12
salut,

en fait, il faut mettre "ntdll.dll" au lieu de "ntdll" dans les external des apis que j'utilise... je vais corriger le zip...bizarre que ca marche sous XP...

ShareVB
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
21 févr. 2005 à 11:42
Re,

J'ai toujours une erreur comme quoi il n'arrive pas à charger ntdll (je suis en win 2000) la dll est bien dans c:\winnt\system32 mais il semble que ca ne marche pas.
Je l'ai copié a cote de l'exe et pareil.

Une idée ?

++,
JMP77.
Rejoignez-nous