Question

Je lâchai mon ordinateur portable pendant que Windows se prépare à hiberner et par conséquent, je suis arrivé un accident de la tête sur le disque dur. (Me apprend à obtenir un disque dur et / ou un ordinateur portable avec un capteur de chute libre la prochaine fois autour.) Quoi qu'il en soit, en cours d'exécution SpinRite pour tenter de récupérer les données ont donné lieu à tous les secteurs de rechange sur le disque à tout être tous utilisés pour tous les secteurs jusqu'à présent récupérables. SpinRite est toujours en cours en ce moment, mais comme il n'y aura pas les secteurs Anymore de rechange à utiliser, je pense que ce sera un exercice inutile, sauf pour me dire où tous les secteurs défectueux.

Quoi qu'il en soit, je prévois d'écrire une application pour tenter de récupérer des données à partir du disque dur. De mes dernières incursions dans defragging, je sais que je peux utiliser FSCTL_GET_RETRIEVAL_POINTERS pour trouver les numéros de cluster logiques pour un fichier donné.

Comment puis-je faire pour essayer de lire les secteurs de cette grappe réelle? Mon fouillant dans la liste de MSDN pour disque, fichiers et codes de contrôle de l'appareil de volume n'a pas eu rien sauter à moi comme la façon dont je reçois les données du cluster réelles.

Dois-je même pas la peine d'essayer de lire à ce faible niveau? Dois-je plutôt être en train de faire SetFilePointer () et ReadFile () appelle à accéder aux décalages de taille de cluster appropriées dans le fichier et lire des morceaux de taille grappe?

Si le fichier que je suis en train de lire a un mauvais secteur, marqueront le fichier NTFS entier comme mauvais et me empêcher d'accéder au fichier à l'avenir? Si oui, comment puis-je dire NTFS ne pas marquer le fichier comme mauvais ou mort? (Rappelez-vous que la HD est maintenant hors de secteurs de rechange à reconfiguré.)

Dois-je dépoussiérer ma connaissance * nix et savoir comment lire / dev /?

Mise à jour: J'ai trouvé la réponse à ma propre question. :-) La solution fait SetFilePointer () et ReadFile () sur la poignée de volume plutôt que sur la poignée de fichier.

Était-ce utile?

La solution

J'ai trouvé la réponse à ma propre question. :-) La solution fait SetFilePointer () et ReadFile () sur la poignée de volume plutôt que sur la poignée de fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top