PDA

View Full Version : [Delphi] Leggere settori di un cd rom


Franziscko
27-07-2006, 21:40
Come da topic.....mi date una mano?
non mi interessa il numero seriale ma poter leggere qualsiasi settore voglio.
Denghiù!!! :D

Franziscko
28-07-2006, 11:59
UP....pliiiiiiiiss..

71104
28-07-2006, 12:40
si sta parlando dello stesso argomento in un altro topic, "lettura HD a basso livello"

71104
28-07-2006, 12:43
ecco: http://www.hwupgrade.it/forum/showthread.php?t=1205995

Franziscko
28-07-2006, 14:25
Ciao, ti ringrazio ma hd e cdrom non è la stessa cosa! là si parla di aprire
un file, io voglio accedere a dei settori, ed in più del C non capisco un acca.. :mc:

in pratica dovremmo accedere all'unità fisica, non logica, come ad esempio fa
benissimo Winhex.

71104
28-07-2006, 16:06
Ciao, ti ringrazio ma hd e cdrom non è la stessa cosa! tra i due cambia solo un ULONG, precisamente questo (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kernel_d/hh/Kernel_d/DevObjts_46146aa1-37d2-4a49-8e50-a5f16b3d15f2.xml.asp?frame=true) :P

là si parla di aprire un file, assolutamente no... :nonsifa:

io voglio accedere a dei settori, da Delphi non riuscirai mai a richiedere la lettura di specifici settori, quello che puoi fare è leggere tutto lo stream e ricostruire i "sector bounds" con un po' di aritmetica (sono sempre multipli di 512, o comunque del campo BytesPerSector di questa (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/disk_geometry_str.asp?frame=true) struct (una struct è un record di Delphi).

ed in più del C non capisco un acca.. :mc: allora ti dico i nomi delle funzioni API corrispondenti: CreateFile (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp?frame=true), ReadFile (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/readfile.asp?frame=true), CloseHandle (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/closehandle.asp?frame=true); le trovi anche nell'help di Delphi.

in pratica dovremmo accedere all'unità fisica, non logica, come ad esempio fa benissimo Winhex. non c'è differenza tra le due; la differenza la percepisci solo a livello di Device Objects, non è certo roba da Delphi :asd:

Franziscko
28-07-2006, 19:46
da Delphi non riuscirai mai a richiedere la lettura di specifici settori, quello che puoi fare è leggere tutto lo stream e ricostruire i "sector bounds" con un po' di aritmetica (sono sempre multipli di 512, o comunque del campo BytesPerSector di questa (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/disk_geometry_str.asp?frame=true) struct (una struct è un record di Delphi).


Ok, ti ringrazio, sei stato abbastanza chiaro, il fatto è che vengo dal basic e Pascal, con gli oggetti faccio a pugni ogni giorno, e mi pareva che Delphi fosse
un linguaggio *serio*, ma mi hai dato la conferma che dovrò passare prima o poi al C. :muro: :muro: :muro:

Approfitto della tua cortesia e soprattutto conoscenza per chiederti un'ultimissima cosa: parli di leggere tutto lo stream, intendi dire un *assieme di files*?? (non potevo trovare aggettivo peggiore! :muro: ) perchè dove vorrei leggere io, files non ce ne dovrebbero essere....
;)

71104
28-07-2006, 20:26
no, mi riferivo proprio al contenuto raw dell'unità: lo leggi a blocchi di dimensione fissa e man mano che lo leggi ricostruisci i "sector bounds" calcolandoteli. o magari stabilisci che la dimensione fissa dei blocchi corrisponda proprio alla dimensione di un settore dell'unità (che come avrai capito puoi ottenere analizzando la geometria del drive mandando un IOCTL_GET_DRIVE_GEOMETRY (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/ioctl_disk_get_drive_geometry.asp?frame=true)) in modo tale che di fatto leggi proprio un settore alla volta.

non è detto comunque che Delphi sia peggiore in tutto del C, dipende sempre da quello che vuoi fare: certe cose si fanno meglio in Delphi (lascia proprio perdere quella schifezza di C++ Builder :Puke: ).

poi penso che tu abbia anche semifrainteso quando dicevo che in Delphi non saresti mai riuscito a leggere specifici settori: in Windows non è proprio possibile in alcun modo richiedere la lettura di uno specifico settore di un volume in user mode :D
l'unico modo è, come ti ho già detto, leggere tutto e calcolare man mano.

Franziscko
29-07-2006, 09:07
Bene, ora non mi resta che sperare in una decina di anni di riuscire a capirci qualcosa... :muro: :muro: :muro: :muro: :muro: