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

C++ Discussion :

Choisir l'emplacement d'écriture sur HDD


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Choisir l'emplacement d'écriture sur HDD
    Bonsoir,

    Je souhaite faire un programme qui puisse écrire sur le disque dur (en fait une clé usb, mais je suppose que ça reviendra au même du point de vue de windows) à un emplacement spécifique.

    Je veux par exemple pouvoir écrire sur tel secteur du disque.

    Ne trouvant pas d'indication sur la manière d'opérer, je me tourne vers vous.
    Merci pour les conseils que vous pourrez me donner.

    Xtatic.

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Xtatic Voir le message
    Je veux par exemple pouvoir écrire sur tel secteur du disque.

    Xtatic.
    A ma connaissance c'est impossible c'est l'OS qui gère cela et cela revient à court-circuiter les services de l'OS.
    En assembleur et sous ms-dos c'était possible avec les interruptions du BIOS ( int 10h)
    Mais avec les OS de maintenant c'est impossible...
    Et puis un fichier sur disque n'est jamais figé dans des secteurs particuliers l'OS peut le déplacer...

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 381
    Points
    20 381
    Par défaut
    A la rigueur essayer avec DeviceIoControl et IOCTL_DISK_SET_PARTITION_INFO_EX comme paramètre
    Je conseille la plus grande prudence en appelant ce genre de fonction.
    Essayer sur un système,PC destiné à faire des tests.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Merci,

    Je vais voir ce que je peux faire avec cette fonction. Etant donné que mon but est de bosser sur une clé usb, je ne prends pas trop de risque.

    Je tiens au courant demain si j'ai pu obtenir ce que je voulais (ou si j'ai ruiné ma machine )

    Xtatic.

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Hello Xtatic,
    oui ce serait intéressant de savoir comment tu as procédé.
    Mais encore une fois je recommende de travailler sur une machine qui n'a pas de données importantes ou sur un vieux PC par exemple on ne sait jamais avec des fonctions bas-niveau tu peux endommager ta machine

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Bonsoir,

    He bien finalement, je n'ai pas trouvé mon bonheur. Parmi tous les controles fonctionnant avec DeviceIoControl, je n'ai pas trouvé de moyen d'écrire un truc particulier à un endroit précis.

    Mais par contre, il y a visiblement moyen de formater un disque (créer une partition). Comme c'est aussi un problème que je souhaitais aborder pour ma clé usb, je me suis penché sur le cas de IOCTL_SET_PARTITION_INFO_EX, de IOCTL_DISK_CREATE_DISK ainsi qu'un dernier dont le nom m'échappe (quelque_chose_layout).

    Malheureusement, avec les fonctions en GET, je parviens à récupérer des infos sur la partition, ou les caractéristiques du volume (nombre de pistes, de cylindres, de secteurs, et d'octet par secteurs), mais pas moyen d'utiliser les fonctions en SET pour créer une partition. Le code erreur renvoyé par GetLastError est 5, ce qui correspond au message "access denied".

    Ceci dit, pour écrire les partitions avec IOCTL_SET_PARTITION_INFO_EX, il faut remplir des structures un peu complexes en renseignant des champs permettant de caractériser une partition MBR ou GTP... DU coup j'ai essayé avec IOCTL_SET_PARTITION_INFO, version antérieur mais plus simple, mais ça n'a rien donné non plus..

    Bref, je nage

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il me semble avoir lu quelquepart que ce que tu veux faire doit impérativement se faire en utilisant un driver (d'où le "access denied"). Seul un driver possède le privilège d'écrire ce que tu veux où tu veux sur le disque.

    Donc il te reste à installer le DDK et à trouver un template de driver (je ne l'ai jamais fais) ...

    Bon courage
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Xtatic
    Bonsoir,

    Je souhaite faire un programme qui puisse écrire sur le disque dur (en fait une clé usb, mais je suppose que ça reviendra au même du point de vue de windows) à un emplacement spécifique.

    Je veux par exemple pouvoir écrire sur tel secteur du disque.
    J'ai de la chance que tu sois sous Windows . Tout d'abord pour lire/écrire sur le disque tu utiliseras les fonctions d'E/S habituelles (fopen, fread/fwrite, fclose ... ou CreateFile, ReadFile/WriteFile, CloseHandle ...) et les fonctions de positionnement habituelles (fseek ou SetFilePointer ...) pour te positionner. Par exemple : fseek(f, 0L, SEEK_SET) te place sur le premier secteur du disque. Tou se joue sur la manière d'ouvrir le disque, le nom que tu dois spécifier dans fopen ou CreateFile doit être de la forme \\.\X: ("\\\\.\\X:") ou X est la lettre du lecteur.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Melem Voir le message
    J'ai de la chance que tu sois sous Windows . Tout d'abord pour lire/écrire sur le disque tu utiliseras les fonctions d'E/S habituelles (fopen, fread/fwrite, fclose ... ou CreateFile, ReadFile/WriteFile, CloseHandle ...) et les fonctions de positionnement habituelles (fseek ou SetFilePointer ...) pour te positionner. Par exemple : fseek(f, 0L, SEEK_SET) te place sur le premier secteur du disque. Tou se joue sur la manière d'ouvrir le disque, le nom que tu dois spécifier dans fopen ou CreateFile doit être de la forme \\.\X: ("\\\\.\\X:") ou X est la lettre du lecteur.
    Tu es sûr de ce que tu dis, j'ai un énorme doute là
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Tu es sûr de ce que tu dis, j'ai un énorme doute là
    Oui. C'est bien de cette façon que j'ai mis mon programme d'amorçage sur le premier secteur d'une disque, lorsque je me suis amusé à créer un petit système d'exploitation (monotâche, système de fichiers perso, etc. mais 32 bits protégé quand même ). Ca marche sous Windows parce que le pilote du système de fichiers de Windows implémente "comme il se doit" les appels ReadFile/WriteFile sur un disque correctement ouvert. D'ailleurs t'as qu'à tester .

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour les tuyaux.

    Je suis tombé hier sur un topic d'un autre forum, dans lequel l'auteur se posait la même question, mais pour vista (qui visiblement est plus tatillon que ses prédécesseurs).

    D'après ce que j'y ai lu, je suppose que mon "acces denied" est du au fait que je n'ai pas fait de lock ni de dismount sur mon volume. En tout cas, ce que tu me dit, Melem, correspond bien à ce que j'ai lu. Je voulais tester avant de donner mes résultats (je me demande ce que va donner le SetFilePointer avec l'algo de wear leveling d'une clé USB).

  12. #12
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Melem Voir le message
    Ca marche sous Windows parce que le pilote du système de fichiers de Windows implémente "comme il se doit" les appels ReadFile/WriteFile sur un disque correctement ouvert. D'ailleurs t'as qu'à tester .
    En fait ca marche sous NT, mais pas Win9x. Sous Unix c'est pareil (/dev/hd0, ...). Idem les ports series, les pipes, la console, ... meme la memoire! C'est le principe du "tout est fichier".

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Tests effectués,

    Et ça marche nickel (sous XP), et apparement même sans faire de lock via la fonction deviceiocontrol.

    Merci pour le coup de main

    Xtatic.

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

Discussions similaires

  1. problème écriture sur un fichier
    Par drinkmilk dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2007, 00h08
  2. Lecture / écriture sur un port com
    Par dorian833 dans le forum C++
    Réponses: 7
    Dernier message: 07/07/2005, 15h20
  3. [MFC] Notification d'écriture sur le disque
    Par Yellowmat dans le forum MFC
    Réponses: 1
    Dernier message: 28/06/2005, 12h00
  4. PB d'écriture sur MSSQLServer à partir d'un service
    Par Dunsany dans le forum Bases de données
    Réponses: 31
    Dernier message: 21/08/2004, 15h25
  5. droits en écriture sur le réseau
    Par julien20vt dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2004, 11h29

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