IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Copier un fichier bloqué


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Copier un fichier bloqué
    Bonjour,

    Je souhaiterais créer ou utiliser un programme permettant de Copier un fichier bloqué par un autre programme.

    Contraintes :
    - le fichier est vraiment bloqué (pas de partage possible, impossible de l'ouvrir)
    - je souhaiterais faire cela en ligne de commande (car je souhaite l'utiliser dans une autre application par la suite)

    Concrètement :
    Un programme créer un fichier *.tmp quand il se lance
    Ce fichier est bloqué (en écriture, lecture, partage... tout)
    Je souhaiterais récupérer ce fichier (son contenu) pour le traiter par la suite avec d'autres applications

    Pistes envisagées (sans succès) :
    - Unlocker 1.8.7 fait cela très bien, mais avec une interface graphique (je l'utilise d'ailleurs actuellement avec Auto-It, mais c'est pas très propre...)
    - J'ai déjà réussi à le débloquer en fermant le "handle", mais le problème c'est que le fichier disparait dès que le "handle" est fermé
    - J'ai réussi à récupérer le n° d'handle associé au fichier, nous pourrions nous en servir pour se substituer au programme

    J'espère avoir été assez clair

    Merci d'avance pour vos précieuses réponses

    NB : Peu importe le langage que vous me proposerez pour la solutions, mais mes préférences sont : C++ et VB. Si vous me trouvé un logiciel qui fait déjà cela, ce serait le MUST.

    Upkanet

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Le mieux c'est de créer un pipe avec CreatePipe; un pipe c'est un morceau de mémoire partagé ou d'autres process peuvent lire
    A pipe is a section of shared memory that processes use for communication. The process that creates a pipe is the pipe server. A process that connects to a pipe is a pipe client. One process writes information to the pipe, then the other process reads the information from the pipe.
    Regarder dans le MSDN sur CreatePipe et l'exemple Creating a Child Process with Redirected Input and Output
    Le contenu du fichier sera copié dans le pipe avec DuplicateHandle..
    Sinon je ne vois pas trop autrement...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Une piste
    Mat.M je n'ai pas accès au programme bloquant le fichier, je ne peux donc pas créer de pipe.

    En fait j'ai une piste qui utilise une partie de la réponse de Mat.M (attention ça peu faire mal à la tête):

    Il faut récupérer le numéro du Handle du programme sur le fichier et faire un duplicate :

    Le programme prog.exe ouvre le fichier file.tmp en récupérant un handle. L'option "shared" est à false, donc file.tmp ne peut pas être partagé (on ne peut ni écrire ni lire ce fichier).

    La solution envisagée serait de récupérer ce handle (qui n'existe que dans le "contexte" de prog.exe) en faisant une requête sur les PID et Handle ouverts sur le système (avec le syscall NtQueryObject) et d'utiliser DuplicateHandle pour ouvrir le handle dans le contexte de mon programme. Windows permet (bizarrement) de dupliquer un handle même si celui-ci n'est pas partageable (shared = false)

    En tout cas, c'est ce que j'ai compris de blog d'Ivanlef0u

    Bon ça c'est la théorie, je ne suis pas contre un peu d'aide pour implémenter tout ça, mes connaissances en C++ et en Vb ne sont que très théoriques justement...

    ++

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Donc, tu veux accéder à un fichier temporaire, dans un état potentiellement instable, créer par un programme auquel tu n'as pas accès ?

    C'est sale. Est-ce vraiment normal de tenter d'accéder à ce fichier tant qu'il est bloqué?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut C'est sale
    Comment ça c'est sale ?

    Je sais que c'est sale, Médinoc, je cherche juste à automatiser un truc que je fait déjà à la mano avec Unlocker :
    J'ai un plugin sur Firefox un peu sale justement qui me bloque certaines ressources et je copie ces ressources bloquées grâce à Unlocker. Comme j'ai du temps en ce moment et que je me fait chier, je me suis lancé dans l'automatisation de cette tâche, j'ai déjà "automatisé" Unlocker avec AutoIt, mais c'est très moche.

    Maintenant que les raisons de la saleté de cette manip sont claires, y a-t-il des suggestions ?

    Le gros sale
    Upkanet

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Avez vous réussi à mettre au point votre programme ? Si tel est le cas je suis très intéresse.
    Non pas pour copier un fichier, mais pour forcer automatiquement son effacement à intervalles régulier.
    J'arrive à le faire avec unlocker comme vous, mais je voudrais que ça se fasse automatiquement toutes les heures.

    Merci

    Wilfrid

Discussions similaires

  1. Réponses: 30
    Dernier message: 02/03/2008, 12h08
  2. Copier certains fichiers d'une arborescence ?
    Par narmataru dans le forum Linux
    Réponses: 4
    Dernier message: 27/04/2004, 13h15
  3. Copier coller Fichier windows
    Par KPitN dans le forum Windows
    Réponses: 8
    Dernier message: 20/04/2004, 18h32
  4. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 08h55
  5. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo