Section courante

A propos

Section administrative du site

Sommaire


Introduction

Les partitions sont  tous simplement une méthode de partage d'information à travers divers système d'exploitation sans que ceux-ci doivent s'adapter au méthode de stockage des concurrents. Par exemple la HPFS est utilisée par IBM pour promouvoir son système d'exploitation OS/2, la NTFS de Microsoft est utilisée pour ventée les mérites de leur système Windows NT et 2000, la FAT32 pour Windows 9X, Linux Ext2 est utilisée pour le système d'exploitation gratuit Linux. Toutes ces formats de stockage peuvent figurer sur le même disque dur cependant pas au même endroit comme on sans doute... Ils également l'utilitée d'offrir une partition fonctionnant mieux avec certain SEX (Système d'EXploitation) qu'avec d'autres : La FAT 12 et 16 sont très efficace sous un DR-DOS.

Partition HPFS d'OS/2

La partition HPFS est un système d'organisation de fichier à très haute performance (Nous l'avons nous-même exploiter sur un 80386 avec un 1 Go de disque dur et peu importe le nombre de fichiers, il demontra toujours des performances exceptionnels largement superieur au FAT 12 et 16. En plus celui-ci offre la possibilité de stocké des fichiers ayant une longueur supérieur des noms et extensions d'une longueur respective de 8 et 3 caractères contrairement au FAT 12 et 16.

Voici donc un petit programme démonstrateur en Turbo Pascal 7 plutôt mal construit, cependant il permettra à certain de mieux comprendre comment on trouve des partitions HPFS d'OS/2 et d'éventuellement en monter sur un système DOS.

Type
 {Structure de lecture pour la disquette}
 SecPosType=Record
  Head:Byte;
  SectTrack:Word;
 End;

 {Structure de partition}
 PartEntryType=Record
  Status:Byte;
  StartSec:SecPosType;
  PartType:Byte;
  EndSec:SecPosType;
  SecOfs,NumSec:LongInt;
 End;

 HPFSSuperBlockRec=Record
  ResA:Array[0..$B]of Byte;
  RootDirFNode:LongInt  { Secteur où se trouve le répertoire racine }
  TotalSector:LongInt        { Nombre total de secteurs dans la partition }
  ResB:LongInt;
  BitmapTable:LongInt;
  ResC:Array[$1C..511]of Byte;
End;

{Description
  -----------

  Cette fonction copie un secteur de partition du disque dur dans un tampon.

 Entrée
 -------

  Lecteur       Code BIOS du lecteur (80h, 81h,...)
  Tete            Numéro de la tête de lecture/écriture
  SecCyl        Numéro de secteur et de cylindre au format BIOS
  Tamp          Tampon dans lequel le secteur est chargé
}

Function ReadPartSec(Lecteur,Tete:Byte;SecCyl:Word;Var Tamp):Boolean;Assembler;ASM
 MOV AX,0201h
 MOV DL,Lecteur
 MOV DH,Tete
 MOV CX,SecCyl
 LES BX,Tamp
 INT 13h
 CMC
 MOV AL,0
 ADC AL,AL
END;

{ Cette fonction change l'unit‚ de disque courant pour l'utilisation par le système d'exploitation. }
 Procedure SetDsk(Disk:Byte);Assembler;ASM
  MOV AH,0Eh
  MOV DL,Disk
  INT 21h
 END;

 { Cette fonction permet de confirmer  la présence  ou non d'unité de disque  logique du système d'exploitation et non pas si une disquette en dans une unité mais bien  l'affectation d'une unité pour  une  périphérique  particulière.}

Function DskExist(Dsk:Byte):Boolean;Var Old,M:Byte;Begin
 DskExist:=False;
 If Dsk>25Then Exit;
 Old:=GetDsk;
 SetDsk(Dsk);
 If(Dsk=GetDsk)Then  DskExist:=True;
 SetDsk(Old);
End;

{ Fonction cherchant la première unité utilisée}
Function FindFirstDskUnused:Byte;Var I:Byte;Begin
 FindFirstDskUnused:=$FF;
 For I:=0to 25do If Not DskExist(I)Then Begin
  FindFirstDskUnused:=I;
  Break;
 End;
End;

Procedure DetectHPFS;
Var
 PartPrimary:PartSecType;
 PartLogical:PartSecType;
 BootRec:Array[0..511]of Byte;
 HPFSBoot:HPFSBootRec Absolute BootRec;
 HPFSSuperBlock:HPFSSuperBlockRec;
 J,I,K:Byte;
 Dsk:Byte;

 Procedure ReadBoot(Head:Byte;SectTrack:Word);
 Var Root:Array[0..511]of Char;
 Begin
  ReadPartSec(K,Head,SectTrack,BootRec);
  If HPFSBoot.Sign='HPFS'Then Begin
   Dsk:=FindFirstDskUnused;
   DriveFormat[Dsk]:=dfiHPFS;
   DrivPhysUnit[Dsk]:=K;
   DrivePartUnit[Dsk]:=I or 4+(J shl 3);
   WriteLn('HPFS Trouvé attribu‚ à l'unité ',Char(Dsk+64),':');
   ReadPartSec(K,Head,SectTrack+16,HPFSSuperBlock);
   WriteLn('Taille de l''unité ',Char(Dsk+64),': ',HPFSSuperBlock.TotalSector*512,' octets');
  End;
 End;

Begin
 For K:=$80to $80+NmHardDsk do Begin
  ReadPartSec(K,0,1,PartPrimary);
  For I:=1to 4do Begin
   If PartPrimary.PartTable[I].PartType=5Then Begin
    ReadPartSec(K,PartPrimary.PartTable[I].StartSec.Head,PartPrimary.PartTable[I].StartSec.SectTrack,PartLogical);
    For J:=1to 4do Begin
     If(PartLogical.PartTable[J].PartType)in[7,$17]Then Begin
      ReadBoot(PartLogical.PartTable[J].StartSec.Head,PartLogical.PartTable[J].StartSec.SectTrack);
     End;
    End;
   End
    Else
   If(PartPrimary.PartTable[J].PartType)in[7,$17]Then Begin
    ReadBoot(PartPrimary.PartTable[J].StartSec.Head,PartPrimary.PartTable[J].StartSec.SectTrack);
   End;
  End;
 End;
End;

BEGIN 
 DetectHPFS;
END.

Voir également

Dictionnaire Informatique - Lettre T - Type de partition.

Dernière mise à jour : Dimanche, le 1 mai 2016