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

Delphi Discussion :

[Flux NTFS] BackupSeek [Bug report]


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de gregcat
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 155
    Par défaut [Flux NTFS] BackupSeek
    je souhaiterais faire un outil de lecture et ecriture dans les méta données des fichier NTFS ( flux ntfs). Concernant la lecture de flux, J'ai trouvé la procédure suivante en navigant sur le web mais il y a une ligne qui pose problème.

    à l'exécution, j'ai une violation d'accès à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BackupSeek(h, sid.Size, 0, dw1, dw2, p);
    Fonction EnumStreamsInfo
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    // path = Chemin+fichier  à analyser
    Procedure EnumStreamsInfo(path:PChar);
    var
      s:string;
      wszStreamName:array[0..MAX_PATH-1] of WCHAR;
      sid:WIN32_STREAM_ID absolute wszStreamName;
      h:thandle;
      p:pointer;
    
      temp,dw1, dw2:cardinal;
    
    
    begin
    
    
      p:=nil;
      h:=CreateFile(path,GENERIC_READ, 0, nil, OPEN_EXISTING,
      FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_POSIX_SEMANTICS, 0);
    
      while true do  // boucle infinie
      begin
    
        form1.memo1.Lines.Add(path+'_-_-_-_-_-_-'); // разграничиваем записи ;)
        BackupRead(h, @wszStreamName, sizeof(sid), temp, FALSE, TRUE, p);
    
        if temp = 0 then
          break;
    
        if sid.dwStreamNameSize > 0 then
        begin // если у потока есть имя, то узнаем его
          BackupRead(h, pointer(integer(@wszStreamName) + sizeof(sid)), sid.dwStreamNameSize, temp, FALSE, TRUE, p);
          if temp <> sid.dwStreamNameSize then
            break;
          //для простоты всё выводиться в TMemo
          form1.memo1.Lines.Add(PwideChar(@sid.cStreamName));
        end;
    
        form1.memo1.Lines.Add('Stream size: '+IntToStr(sid.Size));
        s:='Type of data: ';
    
        case sid.dwStreamId of // определяем тип потока
          BACKUP_DATA: s := s+'data';
          BACKUP_EA_DATA: s := s+'extended attributes';
          BACKUP_SECURITY_DATA: s := s+'security';
          BACKUP_ALTERNATE_DATA: s := s+'other streams';
          BACKUP_LINK: s := s+'link';
        else
          s := s+'unknown';
    
        end;
        form1.memo1.Lines.Add(s);
    
        if sid.Size>0 then
    
           form1.Memo1.Lines.Add(inttostr(h));
        // я не думаю, что у кого-то есть потоки больше 4ГБ, поэтому второй параметр поиска = 0
        BackupSeek(h, sid.Size, 0, dw1, dw2, p);
    
    
      end;
    
      BackupRead(h, @sid, 0, temp, TRUE, FALSE, p);
    
    
      CloseHandle(h);
    end;

  2. #2
    Membre confirmé Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut
    C'est clair pourtant, regarde le commentaire au dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        // я не думаю, что у кого-то есть потоки больше 4ГБ, поэтому второй параметр поиска = 0
        BackupSeek(h, sid.Size, 0, dw1, dw2, p);



  3. #3
    Membre confirmé Avatar de gregcat
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 155
    Par défaut
    oui mais meme traduit par google c'est pas très clair ...

    / / I do not think that anyone has flows more media, and the second parameter


  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Regarde sur le site de JC Bellamy: http://jc.bellamy.free.fr/fr/stream.html

  5. #5
    Membre confirmé Avatar de jambonstar
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 175
    Par défaut

  6. #6
    Membre confirmé Avatar de gregcat
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 155
    Par défaut
    Citation Envoyé par Laurent Dardenne
    Regarde sur le site de JC Bellamy: http://jc.bellamy.free.fr/fr/stream.html
    Merci mais le problème c'est que chez Bellamy y mets cette implémentation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Delphi function BackupSeek(  // version Bellamy(c)
       hFile: THandle; 
       dwLowBytesToSeek, 
       dwHighBytesToSeek: DWORD;
       var lpdwLowByteSeeked, 
       lpdwHighByteSeeked: DWORD;    //   <---- la c'est du dword
       lpContext: Pointer)
    : BOOL; stdcall;
    donc lpdwLowByteSeeked et lpdwHighByteSeeked en type DWORD !

    et sous delphi sa demande des paramètres de type différents:

    sous BDS il demande du type CARDINAL pour lpdwLowByteSeeked et lpdwHighByteSeeked

  7. #7
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Cardinal et DWORD sont tous les deux des 32 bits non signés. Tu ne devrais pas avoir de pb de compilation.

    @+ Claudius

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Citation Envoyé par gregcat
    je souhaiterais faire un outil de lecture et ecriture dans les méta données des fichier NTFS ( flux ntfs). Concernant la lecture de flux, J'ai trouvé la procédure suivante en navigant sur le web mais il y a une ligne qui pose problème.

    à l'exécution, j'ai une violation d'accès à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BackupSeek(h, sid.Size, 0, dw1, dw2, p);
    Je crois que le problème initiale est résolue.

    Pour ma part, je ne porte pas d'autre jugement sur le reste de la
    fonctionnalité du code.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

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

Discussions similaires

  1. problème HD ntfs formaté sous WinXP avec win2000
    Par kalminou dans le forum Windows XP
    Réponses: 7
    Dernier message: 27/08/2003, 17h45
  2. Rediriger un flux de données sous linux
    Par Nicaisse dans le forum POSIX
    Réponses: 7
    Dernier message: 01/07/2003, 16h04
  3. Copie d'un flux dans un autre
    Par Morvan Mikael dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2003, 09h40
  4. Propriétaire d'un fichier en NTFS
    Par numberwan dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2003, 08h22
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

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