efikkan Skrevet 12. april 2006 Del Skrevet 12. april 2006 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
Giddion Skrevet 13. april 2006 Del Skrevet 13. april 2006 Jeg kan ikke se at det finnes en slik funsjon i C, jeg tror nok du må bruke OS spesifike funsjoner. Lenke til kommentar
kjetil7 Skrevet 13. april 2006 Del Skrevet 13. april 2006 (endret) 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 13. april 2006 av kjetil7 Lenke til kommentar
kjetil7 Skrevet 13. april 2006 Del Skrevet 13. april 2006 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
efikkan Skrevet 14. april 2006 Forfatter Del Skrevet 14. april 2006 Jeg tenkte å lese en sektor fra en disk, ikke en partisjon. Men takk, koden fungérte, men passet desverre ikke for mitt bruksområde. Lenke til kommentar
kjetil7 Skrevet 14. april 2006 Del Skrevet 14. april 2006 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
efikkan Skrevet 15. april 2006 Forfatter Del Skrevet 15. april 2006 OK, takk. Jeg skal prøve det ut. Da blir det nesten som i Delphi. Resultatet du viser er MBR så det ser ut som det fungérer. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå