ACTIVER OU DÉSACTIVER UNE PARTITION D'UN DISQUE DUR IDE
SwordONe0v3riDe
Messages postés15Date d'inscriptionmardi 6 août 2002StatutMembreDernière intervention29 août 2005
-
15 avril 2003 à 06:32
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 2007
-
26 févr. 2006 à 02:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 26 févr. 2006 à 02:15
Désolé pour cette réponse très tardive, j'ai été très occupé.
Pour les doc ATAPI, je pense qu'en lançant une recherche tu devrais tomber sur le site officiel de la norme. Tu y trouveras la doc. Mais là je m'en souviens plus désolé. Honnêtement je pense qu'il ne devrait pas être trop difficile à trouver car c'est une norme publique.
Merci pour la correction, effectivement je ne l'avais pas testé car à l'époque, je n'avais plus d'espace disque pour installer une partition linux. Maintenant les temps ont changé. Dès que j'aurais eu le temps de changer la source, voire de l'améliorer, je vous le ferais savoir. En attendant, la correction fera l'affaire.
pcmat2000
Messages postés1Date d'inscriptionmardi 12 avril 2005StatutMembreDernière intervention 1 juillet 2005 1 juil. 2005 à 14:47
Je voulais juste faire un méga gros bisouxXxX au programmeur génial qui nous a pondu ce code, j'ai fait la connerie d'activer 2 partitions primaires sur mon disque (pas fais exprès j'vous jure...) => ca c'est vite réglé avec ce petit prog! :) Vraiment merci beaucoup beaucoup beaucoup !!!
+++
zoran_8000
Messages postés9Date d'inscriptionlundi 26 janvier 2004StatutMembreDernière intervention15 août 2007 4 mai 2005 à 10:50
J'ai modifié un peu le code de ton source C pour qu'il fonctionne sous Linux (tu ne l'avais pas testé), voilà le résultat :
bofur
Messages postés39Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 5 juin 2009 11 avril 2005 à 17:37
serai t'il possible d'avoir les docs ATA et ATAPI
et toute les doc pour acceder aux disque sans le bios
zoran_8000
Messages postés9Date d'inscriptionlundi 26 janvier 2004StatutMembreDernière intervention15 août 2007 7 mars 2005 à 12:03
Merci pour ta réponse/solution ultra-rapide.
Ton code est super bien commenté en plus je vais pouvoir m'en servir !
Encore chapeau !
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 7 mars 2005 à 11:53
Le source ASM ne prend pas en charge les disques SCSI, mais le source C pour linux, indique comment faire pour activer une partition SCSI
zoran_8000
Messages postés9Date d'inscriptionlundi 26 janvier 2004StatutMembreDernière intervention15 août 2007 7 mars 2005 à 09:30
Juste une derniere question, est-ce que ton prog peux prendre en charge des disques SCSI ????
Merci d'avance !
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 5 mars 2005 à 10:24
Malheuresement, les sources fournies sont pas conçu pour linux.
Mais il suffit d'adapter le code source C en utilisant le fichiers /dev/hd? et /dev/sd? (?=a,b,c,d) pour accéder aux disques.
Je fournirai une version C pour linux.
zoran_8000
Messages postés9Date d'inscriptionlundi 26 janvier 2004StatutMembreDernière intervention15 août 2007 3 mars 2005 à 17:28
J'ai une question !
Est-ce que ce programme fonctionne sous les deux mondes (Linux et Windows) ?
En fait j'aimerais m'en serveir pour booter automatiquement d'un système à l'autre en tapant une seule commande sans avoir à choisir au démarrage.
Merci !
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 13 juil. 2004 à 22:58
Oui bien sûr j'ai les docs ATA et ATAPI, je peux accéder aux disques P'n'P sans le BIOS, par les ports IO
mais ça fait longtemps
Le seul truc que je connais pas c'est les structures des systèmes NTFS car j'ai pas chercher à savoir
teknocrack
Messages postés18Date d'inscriptionmercredi 9 avril 2003StatutMembreDernière intervention17 juin 2011 9 juil. 2004 à 10:00
ok merci a toi pour cette réponse rapide, je vais essayé ça. As tu essayé d'autres commandes comme les demandes d'infos du disque, le n° de série (avec la commande EC je crois)?
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 8 juil. 2004 à 23:33
Merci les gars ça fait plaisir
Attention ce programme, n'est pas compilable dans des environnements de développement 32bits comme Visual que ce soit pour la version C ou ASM. Car on accède au disque par le BIOS et donc au bas niveau. Il faut un environnement de dev 16bit comme turboC ou BorlandC/C++ 4.0
FP_SEG, FP_OFF, et int86x sont la bibliothèque DOS.H qui en l'occurence n'existe pas sous Visual
teknocrack
Messages postés18Date d'inscriptionmercredi 9 avril 2003StatutMembreDernière intervention17 juin 2011 8 juil. 2004 à 13:23
le code vraiment digne d'expert, condensé, clair et commenté, et je trouve le niveau tres haut. Toutefois chez moi ça ne marche pas. Je suis loin d'être un expert en C et encore moins en assembleur, mais j'ai ^dû recréer l'union REGS, et la structure SREGS. Apres ça mon Visual C++ 6 me demande toujours ce que signifie int86x, FP_SEG et FP_OFF. C'est dû à visual C++ 6?
Merci de dire aussi à quoi servent ces "fonctions".
SwordONe0v3riDe
Messages postés15Date d'inscriptionmardi 6 août 2002StatutMembreDernière intervention29 août 2005 15 avril 2003 à 06:32
Comme quoi yen a qui déchire bien... :)
Un p'tit bout d'code qui peut être bien utile... :)
Je parle bien sûr de la source C... Cela dit il m'a suffit de lire le code asm pour avoir envie d'm'y remettre... :)
Merci d'avoir commenté tes sources... (faut encourager le peu de gens qui le font...)
Bonne continuation...
26 févr. 2006 à 02:15
Pour les doc ATAPI, je pense qu'en lançant une recherche tu devrais tomber sur le site officiel de la norme. Tu y trouveras la doc. Mais là je m'en souviens plus désolé. Honnêtement je pense qu'il ne devrait pas être trop difficile à trouver car c'est une norme publique.
Merci pour la correction, effectivement je ne l'avais pas testé car à l'époque, je n'avais plus d'espace disque pour installer une partition linux. Maintenant les temps ont changé. Dès que j'aurais eu le temps de changer la source, voire de l'améliorer, je vous le ferais savoir. En attendant, la correction fera l'affaire.
1 juil. 2005 à 14:47
+++
4 mai 2005 à 10:50
#include <stdio.h>
struct Partition
{
unsigned char flag;
char description[15];
};
struct Mbr
{
char bootCode[0x1BE];
struct Partition table[4];
char signature[2];
};
void displayError (void)
{
printf("usage : activate {-h <disqueIDE> | -s <disqueSCSI>} {-a | -d }\n");
printf(" -h : disque IDE a selectionner {0-3}\n");
printf(" -s : disque SCSI a selectionner {0-7}\n");
printf(" -a : activation de la partition (0-3)\n");
printf(" -d : désactivation de la partition (0-3)\n");
}
void affichageMBR(Mbr mbr) {
printf("Contenu du MBR :\n\n");
printf("Partition 0 : 0x%X\n",mbr.table[0].flag);
printf("Partition 1 : 0x%X\n",mbr.table[1].flag);
printf("Partition 2 : 0x%X\n",mbr.table[2].flag);
printf("Partition 3 : 0x%X\n",mbr.table[3].flag);
}
int main(int argc, char *argv[])
{
struct Mbr mbr;
int scsi;
char disk;
char disk_desc[]= "/dev/?d?";
FILE* fd;
unsigned char flag;
int part;
if (argc < 5) {
displayError();
return 1;
};
if (argv[1][1] == 'h') {
scsi= 0; // 0=IDE 1=SCSI
} else if (argv[1][1] == 's') {
scsi= 1;
} else {
displayError();
return 1;
};
if (argv[2][0] >= '0' && argv[2][0] < '8') {
disk= argv[2][0]; // numéro de disque IDE:0-3 SCSI:0-7
} else {
displayError();
return 1;
};
disk_desc[5]= (char) argv[1][1];
disk_desc[7]= 'a';
if (disk > '0') disk_desc[8]= disk;
fd= fopen(disk_desc, "rb+");
if (argv[3][1] == 'a') {
flag = 0x80;
} else if (argv[3][1] == 'd') {
flag = 0x00;
} else {
displayError();
return 1;
};
printf("Disque : %s\nPartition : %c\n",disk_desc,argv[4][0]);
printf("Action (a:activation, d: desactivation) : %c\n",argv[3][1]);
part = argv[4][0] - '0';
if( fd && fread(&mbr, sizeof(mbr), 1, fd) )
{
// Avant
affichageMBR(mbr);
// activation(rendre bootable) => 0x80, sinon (non bootable) => 0x00
//mbr.table[0].flag= 0x00; // 1ère partition
//mbr.table[1].flag= 0x00; // 2ème partition
//mbr.table[2].flag= 0x00; // 3ème partition
//mbr.table[3].flag= 0x00; // 4ème partition
mbr.table[part].flag= flag;
printf("Partition sélectionnée : %i\n",part);
printf("Flag : 0x%X\n",flag);
// Apres
affichageMBR(mbr);
if( !fseek(fd, 0, SEEK_SET) )
{
if( fwrite(&mbr, sizeof(mbr), 1, fd) ) {
printf("Ecriture dans le fichier reussie\n");
fclose(fd);
return 0;
} else {
printf("Erreur d'ecriture dans le fichier\n");
fclose(fd);
return 3;
}
}
else {
fclose(fd);
return 2;
}
}
else {
printf("Erreur de lecteur\n");
return 1; // erreur de lecteur
}
}
11 avril 2005 à 17:37
et toute les doc pour acceder aux disque sans le bios
7 mars 2005 à 12:03
Ton code est super bien commenté en plus je vais pouvoir m'en servir !
Encore chapeau !
7 mars 2005 à 11:53
7 mars 2005 à 09:30
Merci d'avance !
5 mars 2005 à 10:24
Mais il suffit d'adapter le code source C en utilisant le fichiers /dev/hd? et /dev/sd? (?=a,b,c,d) pour accéder aux disques.
Je fournirai une version C pour linux.
3 mars 2005 à 17:28
Est-ce que ce programme fonctionne sous les deux mondes (Linux et Windows) ?
En fait j'aimerais m'en serveir pour booter automatiquement d'un système à l'autre en tapant une seule commande sans avoir à choisir au démarrage.
Merci !
13 juil. 2004 à 22:58
mais ça fait longtemps
Le seul truc que je connais pas c'est les structures des systèmes NTFS car j'ai pas chercher à savoir
9 juil. 2004 à 10:00
8 juil. 2004 à 23:33
Attention ce programme, n'est pas compilable dans des environnements de développement 32bits comme Visual que ce soit pour la version C ou ASM. Car on accède au disque par le BIOS et donc au bas niveau. Il faut un environnement de dev 16bit comme turboC ou BorlandC/C++ 4.0
FP_SEG, FP_OFF, et int86x sont la bibliothèque DOS.H qui en l'occurence n'existe pas sous Visual
8 juil. 2004 à 13:23
Merci de dire aussi à quoi servent ces "fonctions".
15 avril 2003 à 06:32
Un p'tit bout d'code qui peut être bien utile... :)
Je parle bien sûr de la source C... Cela dit il m'a suffit de lire le code asm pour avoir envie d'm'y remettre... :)
Merci d'avoir commenté tes sources... (faut encourager le peu de gens qui le font...)
Bonne continuation...