Lire un fichier utilisé par un autre processus

Signaler
Messages postés
9
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
22 juillet 2009
-
Messages postés
9
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
22 juillet 2009
-
Hello tous,

Tout est dans le titre: Je cherche à lire un fichier en cours d'utilisation par l'OS (verrouillé en lecture-écriture) pour en faire une sauvegarde. Cela est forcément possible puisque les programmes "clôneurs" y parviennent. Comment...  là est la question.

Merci.

9 réponses

Messages postés
1
Date d'inscription
mardi 2 décembre 2008
Statut
Membre
Dernière intervention
22 avril 2009

Je sais que tu préférerais le programmer toi-même mais cette petite application fais bien le travail :
http://ccollomb.free.fr/unlocker/

Marcel
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Euh quand un fichier est ouvert avec SHARE_EXCLUSIVE ou un flag du genre, le processus appellant dénie tout accès à ce fichier, même depuis ce même processus. OpenFile renverra systématiquement HFILE_ERROR sur ce fichier. Mais peut-être que certaines API peuvent permettre de lire un petit bout du fichier, puis lire le bout suivant, etc ... Pourquoi pas MapViewOfFile (puis UnMapViewOfFile). Ou alors lire la mémoire du processus, mais je ne pense pas que cela soit réalisable comme ceci.
Bref, ça a l'air assez dur à faire, ce que tu nous dis là.

@jcema : Le lien que tu passes parle d'une application qui kill un processus qui utilise ce fichier, pour pouvoir le lire tranquillement. Je ne suis pas sûr que ce soit la meilleure technique ... Enfin ça dépend l'usage que l'on veut en faire evidemment ...

Cordialement, Bacterius !
Messages postés
9
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
22 juillet 2009

Merci,

Effectivement, unlocker... ce n'est pas vraiment ce que je cherche. Cette histoire de fichier "locké" m'intrigue pour 2 raisons:

Il existe des programmes capables de faire de la copie de fichier en "mode bloc". Exemple: soft de sauvegarde en ligne. Typiquement, j'ai un fichier outlook.pst de 1 Go, et le soft est non seulement capable de me sauvegarder ce PST alors qu'il est en cours d'utilisation par Outlook (et j'ai testé la restauration, ça marche !), mais il ne me sauvegarde QUE les octets modifiés, soit quelque Mo au lieu de balancer le Go entier.

Des Softs comme XxClone sont capables de cloner un disque système alors que l'OS tourne et que ce même OS verrouille nombre de fichiers. Et xxclone travaille bien en mode fichier, il ne fait pas de copie de secteurs puisqu'on peut cloner d'une partition vers une partition plus petite (tant que la taille des fichiers n'excède pas la taille de la partitino cible bien sûr !) et fait même de l'incrémental au niveau fichier (mise à jour de clone rapide car ne reprend que les fichiers modifiés).

Donc c'est forcément possible non ? En trouvant les blocs physiques sur le HD correspondant au fichier puis en faisant un lecture directe des blocs bit à bit ?

Merci.
ps: attention, je parle bien de xxclone (avec 2 "x") et non de xclone....
Messages postés
41
Date d'inscription
mercredi 5 mars 2008
Statut
Membre
Dernière intervention
23 avril 2009

Ca a été expliqué des milliers de fois sur google groups depuis 18 ans....

On ferme le hande remotely et on fait ce que l'on veut.
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Je suis désolé Miquel75 mais ce n'est pas une bonne manipulation. En faisant ça tu prives le processus de son accès au fichier, et si il l'utilise pour une opération critique, ça peut conduire à la fermeture de ce processus, et parfois à des dommages matériels. Si c'est bien ce que tu entends par "fermer le handle de fichier d'un processus A depuis un processus B".

Cordialement, Bacterius !
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Et puis c'est pas très poli ni très professionnel tout ça ... Je serais une application, j'aimerais pas qu'on m'arrache mon descripteur de fichier des mains ...

Cordialement, Bacterius !
Messages postés
9
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
22 juillet 2009

Tout à fait d'accord avec Bacterius sur le fond. Le processus qui bloque mon fichier est un processus windows, hors de question de le brutaliser !

(Quant à la forme "Ca a été expliqué des milliers de fois sur google groups depuis 18 ans....", c'est pas top non plus. Tous les utilisateurs de ce forum ne développent pas 16H00 par jour sur Delphi, sinon ils seraient tous experts, n'auraient pas de question, et... ne seraient donc pas sur ce forum.)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
Salut,

CreateFile.

Faudrait savoir avec quels flags de partage le fichier a été ouvert, et avec quel droit tu l'ouvres toi.

Essaie d'ouvrir ton fichier avec les trois :
FILE_SHARE_DELETE
FILE_SHARE_READ
FILE_SHARE_WRITE

Et en GENERIC_READ pour le DesiredAccess.
Messages postés
9
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
22 juillet 2009

Moi je veux juste le lire.
Je vais essayer, dès que j'ai un peu de temps, donc semaine prochaine, lundi probablement, et je reviendrai te dire si c'est ok.

Merci.