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

Dotnet Discussion :

Lecture de disque dur


Sujet :

Dotnet

  1. #1
    Membre régulier
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 115
    Points
    115
    Par défaut Lecture de disque dur
    Bonjour,

    Je dois comparer les premiers secteurs de deux disques dur pour trouver les différences et éventuellement écrire sur les disques en fonction de ce que je trouverai.
    Les disques durs ne possèdent pas de partitions lisible par windows. Il s'agit vraiment de lire octet par octet au niveau hardware.
    Pour lire les disques, j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
            public const short FILE_ATTRIBUTE_NORMAL = 0x80;
            public const short INVALID_HANDLE_VALUE = -1;
            public const uint GENERIC_READ = 0x80000000;
            public const uint CREATE_NEW = 1;
            public const uint CREATE_ALWAYS = 2;
            public const uint OPEN_EXISTING = 3;
     
            public const int FileFlagNoBuffering = 0x20000000;
     
            [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
            static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess,
              uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
              uint dwFlagsAndAttributes, IntPtr hTemplateFile);
     
             var path = string.Format(@"\\.\PHYSICALDRIVE{0}", diskNumber);
                using (var handleValue = CreateFile(path, GENERIC_READ, 1, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero))
                {
                    if (handleValue.IsInvalid)
                    {
                        Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
                    }
     
                    var inBuffer = new byte[512];
     
                    using (var disk = new FileStream(handleValue, FileAccess.Read))
                    {
                        disk.Seek(0, SeekOrigin.Begin);
                        for (int i = 0; i < 512; i++)
                        {
                           inBuffer[i] = (byte) disk.ReadByte();
                        }
                    }
                    for (int i = 0; i < 512; i++)
                    {
                        Console.Write(inBuffer[i].ToString("x2") + " ");
                    }
                    Console.Read();
    Le disque auquel je tente d'accèder est en USB. Lorsque je lance mon application (avec les droits d'administration), ReadByte lève une exception : IOException le périphérique n'est pas prêt

    Sachant que ce code fonctionne sur d'autres disques (dont le format est lisible par windows) ; Une idée pour résoudre ce problème ?

  2. #2
    Membre régulier
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Bonjour,

    Les premiers tests ont été effectué sur un Windows 8.1 Enterprise 64 bits. Ils provoquaient l'IOException.

    Avec le même code et le même disque en USB sur une autre machine en Windows 7 Professionnel N 64 bits, le résultat est conforme aux attentes.

    Je n'ai pas vraiment d'explication. C'est tombé en marche et cela répondra à mon besoin one-shot.

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

Discussions similaires

  1. [Disque Dur] probleme de lecture de disque dur
    Par GabMbiya dans le forum Périphériques
    Réponses: 1
    Dernier message: 26/08/2013, 10h44
  2. lecture fichier disque dur avec caractères spéciaux.
    Par faitgaffe dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2010, 20h48
  3. Lecture du N° série physique du disque dur
    Par touhami dans le forum Delphi
    Réponses: 9
    Dernier message: 01/02/2007, 19h58
  4. Lecture du disque dur externe
    Par Batchu dans le forum Composants
    Réponses: 4
    Dernier message: 29/09/2006, 17h10
  5. Comment accéder à un disque dur en lecture/ecriture ?
    Par tintin22 dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 29/09/2005, 19h52

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