Bonjour à tous,
Dans le cadre d'une création de bootloader, je voudrais tester celui-ci via une image de disquette. J'ai crée cette image, je l'ai monté et jusque là tout va bien.
Le truc c'est que maintenant je voudrais aller écrire mon bootloader dedans (cad sur le premier secteur (0). Ne trouvant pas d'outils pour le faire (je suis sous windows 10 64 bits, du coup on oublie les debug.exe, ...) et je ne sais pour quel raison, Copypart ne fonctionne pas (dés que je met A: dans la destination celui-ci me renvoie une erreur comme quoi il ne peut créer le fichier de destination ... normal c'est pas un fichier ... bref). Du coup je me suis dit, ben ok je vais écrire le code en C++.
Alors autant pour écrire sur un disque comme le C: ça va nickel car je connais sont chemin physique à savoir \\.\PhysicalDrive0, mais comment connaitre celui du disk A: ?? (car un CreateFile sur \\.\A: me donne accès au drive logique). la commande wmic ne renvoie pas ce disque.
Merci d'avance pour votre retour.
Exemple qui fonctionne pour écrire sur un secteur du disque C: (dans mon cas) :
donc si _dsk = \\.\PhysicalDrive0
J'espère avoir été claire :s
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 BOOL WriteSect (const char *_dsk, BYTE ** _mbr, unsigned int _nsect // sector number, starting with 0 ) { DWORD dwWritten; HANDLE hDisk = CreateFile(_dsk , GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE , 0 , OPEN_EXISTING , 0 , 0); if (hDisk == INVALID_HANDLE_VALUE) // this may happen if another program is already reading from disk { return FALSE; } SetFilePointer(hDisk, _nsect * 512, 0, FILE_BEGIN); if (WriteFile(hDisk, _mbr, 512, &dwWritten, 0) == FALSE) { CloseHandle(hDisk); return FALSE; } CloseHandle(hDisk); return TRUE; }
Merci d'avance pour vos retours.
Partager