Gå til innhold

Lese/skrive til en sektor på disken


Anbefalte innlegg

Hei!

 

Hvilken måte er den enkleste til å lese og skrive til en angitt sektor på en angitt harddisk? (Jeg vil helst vite metoder som ikke krever mye kode)

 

Jeg vil vite det i C-kode (ikke C++).

 

Jeg takker for alle svar.

 

God påske!

 

Hilsen,

efikkan.

Lenke til kommentar
Videoannonse
Annonse

Lese boot sector fra disken (windows):

 

#include <windows.h>
#include <stdio.h>

#define BUFFER_SIZE 512

int main()
{
 HANDLE device;
 char buffer[BUFFER_SIZE];
 DWORD bytesRead;

 /* open device */
 device = CreateFile("\\\\.\\C:",
                     GENERIC_READ,
                     FILE_SHARE_READ|FILE_SHARE_WRITE,
                     0,
                     OPEN_EXISTING,
                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
                     0);

 /* read first 512 bytes (boot sector) and close device */
 ReadFile(device, buffer, BUFFER_SIZE, &bytesRead, 0);
 CloseHandle(device);
}

 

Følte ikke for å bygynne å skrive til disken min. Men du kan sikkert finne ut av det selv. Regner med at du kan bruke samme API for å skrive til disken.

 

Hvis ikke så tror jeg du må du ned på en lavere nivå som du finner i DDK'en (DeviceIOControl osv..)

Endret av kjetil7
Lenke til kommentar

Glemte denne:

 

#define HEX_VIEW_WIDTH 16

void dump_as_hex(char* buffer, int bufferSize)
{
 int i, col;
 char ascii[HEX_VIEW_WIDTH + 1];
 char c;

 col = 0;
 ascii[HEX_VIEW_WIDTH] = 0;
 
 for(i=0; i<bufferSize; i++)
 {
   c = *buffer++;
       
   printf("%02x ", (unsigned char) c );

   if(c >= 32)
     ascii[col] = c;
   else
     ascii[col] = '.';

   if(++col == HEX_VIEW_WIDTH)
   {
     printf("%s\n", ascii);
     col = 0;
   }
 }

 if(col)
 {
   ascii[col] = 0;
   printf("%s\n", ascii);
 }
}

 

...som skriver ut bufferet som et hex view.

Lenke til kommentar

Beklager, må lære meg å lese litt mer nøye før jeg poster.

 

Nå er ikke jeg noe ekspert på dette området, men jeg tror du kan bruke samme metode for å lese fra disken. Bytt ut strengen i CreateFile med:

 

\\\\.\\PhysicalDrive0

 

Det står mer om dette på MSDN hvis du slår opp på CreateFile.

 

Resultat fra en av diskene mine:

 

33 c0 8e d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c 3.....|.P.P....|
bf 1b 06 50 57 b9 e5 01 f3 a4 cb bd be 07 b1 04 ...PW...........
38 6e 00 7c 09 75 13 83 c5 10 e2 f4 cd 18 8b f5 8n.|.u..........
83 c6 10 49 74 19 38 2c 74 f6 a0 b5 07 b4 07 8b ...It.8,t.......
f0 ac 3c 00 74 fc bb 07 00 b4 0e cd 10 eb f2 88 ..<.t...........
4e 10 e8 46 00 73 2a fe 46 10 80 7e 04 0b 74 0b N..F.s*.F..~..t.
80 7e 04 0c 74 05 a0 b6 07 75 d2 80 46 02 06 83 .~..t....u..F...
46 08 06 83 56 0a 00 e8 21 00 73 05 a0 b6 07 eb F...V...!.s.....
bc 81 3e fe 7d 55 aa 74 0b 80 7e 10 00 74 c8 a0 ..>.}U.t..~..t..
b7 07 eb a9 8b fc 1e 57 8b f5 cb bf 05 00 8a 56 .......W.......V
00 b4 08 cd 13 72 23 8a c1 24 3f 98 8a de 8a fc .....r#..$?.....
43 f7 e3 8b d1 86 d6 b1 06 d2 ee 42 f7 e2 39 56 C..........B..9V
0a 77 23 72 05 39 46 08 73 1c b8 01 02 bb 00 7c .w#r.9F.s......|
8b 4e 02 8b 56 00 cd 13 73 51 4f 74 4e 32 e4 8a .N..V...sQOtN2..
56 00 cd 13 eb e4 8a 56 00 60 bb aa 55 b4 41 cd V......V.`..U.A.
13 72 36 81 fb 55 aa 75 30 f6 c1 01 74 2b 61 60 .r6..U.u0...t+a`
6a 00 6a 00 ff 76 0a ff 76 08 6a 00 68 00 7c 6a j.j..v..v.j.h.|j
01 6a 10 b4 42 8b f4 cd 13 61 61 73 0e 4f 74 0b .j..B....aas.Ot.
32 e4 8a 56 00 cd 13 eb d6 61 f9 c3 49 6e 76 61 2..V.....a..Inva
6c 69 64 20 70 61 72 74 69 74 69 6f 6e 20 74 61 lid partition ta
62 6c 65 00 45 72 72 6f 72 20 6c 6f 61 64 69 6e ble.Error loadin
67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 g operating syst
65 6d 00 4d 69 73 73 69 6e 67 20 6f 70 65 72 61 em.Missing opera
74 69 6e 67 20 73 79 73 74 65 6d 00 00 00 00 00 ting system.....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 2c 44 63 e3 28 9a e3 00 00 00 01 .....,Dc.(......
01 00 07 fe ff ff 3f 00 00 00 82 8a a1 12 00 00 ......?.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa ..............U.

 

Hvis ikke dette er det du er ute etter ville jeg sjekket MSDN og DeviceIOControl...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...