begin process at 2010 02 09 14:05:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

c et asm

 > ACTIVER OU DÉSACTIVER UNE PARTITION D'UN DISQUE DUR IDE

ACTIVER OU DÉSACTIVER UNE PARTITION D'UN DISQUE DUR IDE


 Information sur la source

Attention: ce code a été marqué comme suspect par un admin, il peut donc être dangereux. Ce code a été laissé sur le site dans un but pédagogique, ne l'exécutez pas si vous ne comprenez pas son contenu!
Note :
Aucune note
Catégorie :c et asm Classé sous :partition, disquedur, activer, désactiver Niveau :Expert Date de création :31/03/2003 Date de mise à jour :05/03/2005 14:04:56 Vu / téléchargé :16 045 / 539

Auteur : CoreBreaker

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


 Description

Ce programme permet de rendre une partition primaire d'un disque dur IDE bootable. Il permet aussi de ne plus la rendre bootable.

Il est programmé en assembleur.
Une version très light en Borland C 3.1 est fourni aussi

ATTENTION ce programme est dangeureux, il attaque directement le MBR.
La lecture du début du source assembleur est vivement conseillée.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 mars 2005 14:04:56 :
J'ai ajouter la version C pour linux (activate_linux.c) Par contre je n'ai pas tenté de le compiler, je ne l'ai pas testé

 Sources du même auteur

Source avec Zip Source avec une capture MENU DE CONVERSION

 Sources de la même categorie

Source avec Zip MOT PALINDROME par Tinsalhi
EXECUTE /USR/BIN/ID par 0x0syscall
BIBLIOTHEQUE POUR LE 8086 par flory_
.:| CONVERSION D'UNE CHAINE EN MAJUSCULE |:. par fenkouch
PROGRAMME DE TRI (CROISSANT) D'UN TABLEAU EN ASSEMBLEUR DU D... par monticarlo

Commentaires et avis

Commentaire de SwordONe0v3riDe le 15/04/2003 06:32:15

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...

Commentaire de teknocrack le 08/07/2004 13:23:01

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".

Commentaire de CoreBreaker le 08/07/2004 23:33:37

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

Commentaire de teknocrack le 09/07/2004 10:00:01

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)?

Commentaire de CoreBreaker le 13/07/2004 22:58:51

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

Commentaire de zoran_8000 le 03/03/2005 17:28:27

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 !

Commentaire de CoreBreaker le 05/03/2005 10:24:19

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.

Commentaire de zoran_8000 le 07/03/2005 09:30:40

Juste une derniere question, est-ce que ton prog peux prendre en charge des disques SCSI ????

Merci d'avance !

Commentaire de CoreBreaker le 07/03/2005 11:53:14

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

Commentaire de zoran_8000 le 07/03/2005 12:03:14

Merci pour ta réponse/solution ultra-rapide.

Ton code est super bien commenté en plus je vais pouvoir m'en servir !

Encore chapeau !

Commentaire de bofur le 11/04/2005 17:37:31

serai t'il possible d'avoir les docs ATA et ATAPI
et toute les doc pour acceder aux disque sans le bios

Commentaire de zoran_8000 le 04/05/2005 10:50:32

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 :

#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 <partition> | -d <partition>}\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 <partition> (0-3)\n");
printf(" -d : désactivation de la partition <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
}
}


Commentaire de pcmat2000 le 01/07/2005 14:47:10

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 !!!
+++

Commentaire de CoreBreaker le 26/02/2006 02:15:22

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Partition ntfs et fat [ par phoenix1969asm ] Salut je souhaiterais pouvoir activer ou desactiver une partion de mon disque dur ... que se soit une partition fat ou ntfs ... et en MASMje remercie


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales