Domanda

Ho lasciato il mio computer portatile mentre Windows stava preparando per il letargo e, di conseguenza, ho avuto un crash testa sul disco rigido. (Mi insegna a ottenere un disco rigido e / o portatile con un sensore di caduta libera prossima volta.) In ogni caso, in esecuzione SpinRite per cercare di recuperare i dati ha portato in tutti i settori di riserva sul disco a tutti essere tutto esaurito per tutte le settori recuperabili finora. SpinRite è ancora in corso in questo momento, ma dal momento che non ci sarà più settori di riserva da utilizzare, credo che sarà un esercizio inutile se non per dirmi dove tutti i settori danneggiati sono.

Comunque, sto pensando di scrivere un programma per cercare di recuperare i dati dal disco rigido. Dalle mie incursioni passato nel defragging, so che posso usare FSCTL_GET_RETRIEVAL_POINTERS per capire i numeri di cluster logico per un dato file.

Come faccio ad andare su cercando di leggere i settori di tale cluster reale? Il mio scavo attraverso la quotazione di MSDN per disco, file, e codici di controllo dei dispositivi Il volume non ha avuto niente saltare fuori a me come il mio modo di arrivare ai dati del cluster effettivi.

Non dovrei nemmeno cercando di leggere in quel basso livello? Dovrei invece essere facendo SetFilePointer () e ReadFile () chiama per raggiungere le opportune compensazioni dimensioni dei cluster nel file e leggere blocchi di cluster di dimensioni?

Se il file che sto cercando di leggere ha un settore danneggiato, saranno NTFS contrassegnare l'intero file così male e mi impedisce di accedere al file in futuro? Se sì, come faccio a dire NTFS non per contrassegnare il file come cattivo o morto? (Ricordate che l'HD è ormai fuori settori di ricambio da rimappare.)

Devo rispolverare le mie conoscenze * nix e capire come leggere / dev /?

Aggiornamento: ho trovato la risposta alla mia domanda. :-) La soluzione sta facendo SetFilePointer () e ReadFile () sulla maniglia del volume piuttosto che sulla maniglia di file.

È stato utile?

Soluzione

ho trovato la risposta alla mia domanda. :-) La soluzione sta facendo SetFilePointer () e ReadFile () sulla maniglia del volume piuttosto che sulla maniglia di file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top