Czytanie sektorow

0

Jak w C przeczytac sektor po sektorze np z dyskietki zeby pozniej moc zapisac je do pliku tworzac "obraz napedu" ??

0

najlepiej przerwaniem asemblera, bo innego sposobu odczytania bootsektora nie znam :)

0

ehhh.... wolałbym to jakos zrobic bez uzycia asm i winapi :(

0

po prostu otwórz plik "\\.\A:" i czytaj z niego paczkami 512 albo 1024... bajtów
błędu nie wywala, jak dyskietki nie ma w napędzie to odczytasz same zera

Na partycji C odczytasz nawet bootsector

// ciekawostka, daj to koniecznie do faq [mf]

0

hmm pod winda najlepiej uzyc winapi, pod unixem wystarczy read i /dev/fd0 a pod dosem masz przerwanie 13h

0
sapero napisał(a)

po prostu otwórz plik "\\.\A:" i czytaj z niego paczkami 512 albo 1024... bajtów
błędu nie wywala, jak dyskietki nie ma w napędzie to odczytasz same zera

Na partycji C odczytasz nawet bootsector

// ciekawostka, daj to koniecznie do faq [mf]

u mnie pod Win XP bez zadnych SP ten sposób nie dziala. uzywam delphi 7, funkcji fileopen, fileseek i fileread a potem wrzucam kody poszczegolnych zczytanych znakow do memo. Implementuje to '\.\C:' bo nie mam stacji dyskietek w laptopie. w memo mam same 0

0

nie wierzysz to zobacz http://people.freenet.de/sapero/readsector.png
\\.\PHYSICALDRIVE0 pokazuje coś innego

0

dziala :) "chyba dobrze" tylko mam jeszcze dwa pytanie:

  1. dlaczego tak sie podaje sciezke do floppa ?? :|
  2. czemu mam czytac po np:512 bajtow ?? przieciez rownie dobrze moge bajt po bajcie odczytywac i potem do pliku do zapisywac :)

Sapero [browar] --- dzieki za pomoc :)

0

w opisie ReadFile pisze że bufor odczytu musi być wielokrotnością wielkości sektora danego woluminu, ale nie dotyczy to dysków twardych

cóż to jest 512 bajtów? Tyle co 2 stringi :)
a \.\ oznacza samo Device, czyli nie sam nośnik

na win9* trzeba inaczej:

DIOC_REGISTERS reg

char buffer[512]
int head, cyinder, sector

head    = 0 
cyinder = 0 
sector  = 0 
// head = 0 for head 0 or 0x0100 for head 1

hDevice = CreateFile("\\\\.\\vwin32", 0, 0, NULL, 0,FILE_FLAG_DELETE_ON_CLOSE, NULL)

   reg.regEAX   = 512 //wielkość bufora
   reg.regEBX   = &buffer 
   reg.regECX   = cylinder<<8 + sector 
   reg.regEDX   = head 
   reg.regFlags = 0x0001 

   fResult = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_INT13, & reg, 28, & reg, 28, & byteCnt, NULL)

cylinder, head i sector musisz podać

SEEK file,512*((sector-1)+(cylinder18)+(head80*18))
a co do tego '-1' przy sektorze - nie ja ten wzór pisałem
może bardziej czytelny kod na codeguru

& reg i & byteCnt sklej bo sie zmienia na (R)

0

oki... teraz juz wszystko kumam :)) potrzebowalem tego do zrobienia programu zaliczeniowego ..... dodam moze jeszcze jakąs prosta kompresje && szyfrowanie :P

0
sapero napisał(a)

nie wierzysz to zobacz http://people.freenet.de/sapero/readsector.png
\\.\PHYSICALDRIVE0 pokazuje coś innego

to akurat dziala, zwrocilo mi pare krzaczkow + napis "LILO" wiec jestem pewien ze dziala :) natomiast \.\C: mi nie dzialalo :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1