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

Qt Discussion :

Lire MBR avec Qt ?


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Lire MBR avec Qt ?
    Bonjour,

    J'utilise actuellement un programme permettant de lire le mbr (master boot record, les 512 premiers octets d'une partition), afin d'aller y chercher différentes informations relatives a mes partitions.

    Pour ceci, j'utilise les API Windows( CreateFile(), DeviceIoControl(), ... ).
    Je souhaite maintenant avoir la possibilité d'utiliser mon programme sur d'autre OS.

    Malheureusement, je ne trouve pas d'équivalent sous Qt pour lire le MBR. Avez vous une idée de la methode a utiliser.

    Cordialement,
    PKO

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Salut,

    je pense que ce genre de fonctionnalité est hautement dépendant des pilotes du contrôleur de disque dur, donc varient fortement en fonction de l'OS.

    Tu ne pourras malheureusement pas t'en sortir juste avec Qt.

    Il faudrait regarder pour développer toi même ta propre interface générique avec une implémentation spécifique pour chaque OS (Windows, Linux, MacOS, ...).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour.

    Qt ne propose donc pas d'outil permettant de lire de telles informations !?

    En cherchant dans la documentation, j'ai vu qu'il été possible d'utiliser QFile ou QIODevice. Malheureusement, ces 2 méthodes ne semblent fonctionner qu'avec des fichiers.

    N'y a t'il pas un moyen d'utiliser ces méthodes en remplaçant le nom du fichier par un élément du type "PHYSICALDRIVE0" pour indiquer par exemple le hdd 0 ?

    Cordialement,
    PKO

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    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 527
    Par défaut
    Nouknouk a parfaitement raison c'est trop bas-niveau seul l'OS peut faire cela.
    Qt c'est une bibliothèques de classes orientée en partie interface utilisateur donc la seule solution c'est d'appeler des API windows.
    Sinon tu peux faire une dll de code chargée dans ton appli développée avec Qt

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour et merci pour votre aide.

    Effectivement, Qt étant plutôt orienté ihm, je comprend que ce genre de methode ne soit pas implémentée.

    Désolé d'insister, mais d'autre bibliothèques sont elles capables de faire cela ? Il doit bien y avoir un moyen de lire ce satané mbr sous Linux tout de même ?

    Cordialement,
    PKO

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    Il vaut mieux faire ce genre de manip avec les fonctions système du C.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Citation Envoyé par dj.motte Voir le message
    Salut,

    Il vaut mieux faire ce genre de manip avec les fonctions système du C.
    Bonjour.

    Quand tu parles des "fonctions systéme du C", tu parles des fonctions standards c'est bien ca ?

  8. #8
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par Altess Voir le message
    Quand tu parles des "fonctions systéme du C", tu parles des fonctions standards c'est bien ca ?
    Effectivement,

    il y a même encore plus simple sous linux: on peut extraire les 512 fameux octets de la MBR (et par exemple les envoyer vers un fichier mbr.bin) au moyen d'une simple commande dans un terminal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dd if=/dev/sda of=mbr.bin bs=512 count=1

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Altess Voir le message
    Bonjour.

    Quand tu parles des "fonctions systéme du C", tu parles des fonctions standards c'est bien ca ?
    Il n'y a pas, à ma connaissance, de fonction standard. Ca dépend de l'OS. Certains te permettent de lire ces infos comme un fichier, tant mieux, mais ce n'est pas le cas de tous (cf le fameux programme dd qui a été porté sous Windows et qui utilise... l'API Windows http://www.dreamincode.net/forums/showtopic25458.htm)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour.

    nouknouk > Effectivement, c'est une solution. Je ne suis pas fan des commandes de ce style, mais si je n'ai pas le choix, je passerai par là.
    J'évite au maximum les commandes du style system(...), je trouve que c'est "anticonformiste", tout comme le goto l'est pour certain.

    Matthieu Brucher > Merci pour ces informations. Malgré tout ce qu'on peut dire de mal sur les API Windows, c'est pas si mal, assez complet, mais pensé par, et pour windows ... tant pis pour moi.

    Corsialement,
    PKO

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    Effectivement,

    il y a même encore plus simple sous linux: on peut extraire les 512 fameux octets de la MBR (et par exemple les envoyer vers un fichier mbr.bin) au moyen d'une simple commande dans un terminal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dd if=/dev/sda of=mbr.bin bs=512 count=1
    Salut,

    C'est une solution avec l'OS Linux. On peut faire la même chose en C en reprenant les fonctions qui recoupent le domaine de la programmation système. Il existe des fonctions en C permettant d'identifier un type de périphérique et d'y faire des opérations comme lire ou écrire dans des secteurs.

    Le problème c'est qu'il ne faut pas rater son coup, sinon c'est la catastrophe.

    Avec l'OS de Windows XP ou Vista je ne sais pas s'il existe une fonctionnalité pour sauvegarder le MBR.

    Ceci étant si le MBR est écrasé et qu'au démarrage on n'obtient que la partition de Linux on pourra toujours le restaurer. Mais si au démarrage il n'y a plus que la partition de Windows j'ignore la procédure dans ce cas.

    Il faut sans doute s'amuser avec des CD Linux bootables en mode console pour y arriver.

    C'est un peu l'histoire du numéro de dépannage du téléphone que l'on peut appeler lorsque le téléphone tombe en panne.

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 138
    Par défaut
    Citation Envoyé par Altess Voir le message
    Malgré tout ce qu'on peut dire de mal sur les API Windows, c'est pas si mal, assez complet, mais pensé par, et pour windows ... tant pis pour moi.
    C'est pas ce qui a le plus de potentiel (Qt est bien meilleur à ce niveau ^^), mais pour ce que tu veux faire (qui est spécifique au système d'exploitation utilisé) c'est probablement le plus adapté .

    PS : j'utilise Qt depuis peu et je suis étonné par le potentiel de la chose ^^

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    dj.motte > C'est vrai, à manipuler avec précautions. J'ai toujours mon live cd Linux sous la main au cas ou ca plante (et ca plante ...). Des outils comme EditHexa permettent de sauver le MBR sous windows, je conseil d'ailleurs cet éditeur au passage .

    Cordialement,
    PKO

  14. #14
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Effectivement, c'est une solution. Je ne suis pas fan des commandes de ce style, mais si je n'ai pas le choix, je passerai par là.
    Le passage par la ligne de commande n'est absolument pas obligatoire, comme le précise dj.motte:
    Citation Envoyé par dj.motte Voir le message
    On peut faire la même chose en C en reprenant les fonctions qui recoupent le domaine de la programmation système. Il existe des fonctions en C permettant d'identifier un type de périphérique et d'y faire des opérations comme lire ou écrire dans des secteurs.
    Mon exemple en ligne de commande était juste là pour montrer que même en ligne de commande, c'est faisable sous linux.

    Le problème c'est qu'il ne faut pas rater son coup, sinon c'est la catastrophe [...]Ceci étant si le MBR est écrasé [...]
    Oui et non: si tu te restreints à n'y accéder qu'en lecture, je ne vois pas de danger potentiel.

    Au passage, sous linux comme sur probablement d'autres systèmes, ton application devra faire usage de droits 'administrateur' pour accéder à ce genre d'information. A prendre en compte lors du design de l'application.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    nounouk > Oui, excusez moi, je suis passé a travers ces quelques lignes :

    C'est une solution avec l'OS Linux. On peut faire la même chose en C en reprenant les fonctions qui recoupent le domaine de la programmation système. Il existe des fonctions en C permettant d'identifier un type de périphérique et d'y faire des opérations comme lire ou écrire dans des secteurs.
    De quelles fonctions s'agit t'il ? A première vue, ça ne me dit rien du tout

  16. #16
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par Altess Voir le message
    De quelles fonctions s'agit t'il ? A première vue, ça ne me dit rien du tout
    A priori sous linux, ton disque dur '/dev/sda' est un simple device comme un autre ... un simple 'fichier' dans le système de fichier, quoi.

    Donc les fonctions standard d'ouverture/lecture de fichier (fopen, fread, ...), devraient te suffire.

    Sinon, n'hésite pas à founier toujours du côté de l'exécutable 'dd' cité plus haut ... mais cette fois-ci dans son code source pour voir comment c'est fait

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Ouiiii ! Effectivement, sous Linux, tout est fichier !
    Les disques (/dev/sda) et les partitions (/dev/sda1) aussi !

    Je vais me pencher sur tout ca.

    Cordialement,
    PKO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour lire son avec SDL
    Par Spooky6900 dans le forum SDL
    Réponses: 1
    Dernier message: 28/02/2007, 18h12
  2. Lire MP3 avec le TMediaPlayer
    Par jmjmjm dans le forum Delphi
    Réponses: 4
    Dernier message: 10/07/2006, 16h28
  3. Reinitialisation MBR avec XP et sans lecteur de disquette
    Par Moustico dans le forum Windows XP
    Réponses: 1
    Dernier message: 18/01/2006, 07h52
  4. [Vba] Lire BDD avec Excel
    Par Emcy dans le forum Access
    Réponses: 12
    Dernier message: 09/11/2005, 11h09
  5. Lire XML avec ASP
    Par Tops dans le forum ASP
    Réponses: 4
    Dernier message: 04/04/2005, 15h40

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