C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

削除済みのファイルにアクセスする方法

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■95006 / inTopicNo.1)  削除済みのファイルにアクセスする方法
  
□投稿者/ ppp (1回)-(2020/06/11(Thu) 10:09:23)

分類:[.NET 全般] 

VB.NETを使って、
ファイル復元ソフトや完全削除ソフトのようなものを作ってみたいと考えています。

削除済みのファイルリストを取得して
そのファイルにアクセスしたいのですが、
どのようなコードを使えば良いですか?

調べてみてはみたのですが、
情報が見つからなかったのでお教えください。


引用返信 編集キー/
■95007 / inTopicNo.2)  Re[1]: 削除済みのファイルにアクセスする方法
□投稿者/ 774RR (789回)-(2020/06/11(Thu) 11:00:16)
「削除済み」とはこの場合、ゴミ箱に投入した(真に削除処理はまだ)という意味ではなくて
Win32 API でいうところの DeleteFile で真に削除したもの、ってことで良いのかな?

その昔の MS-DOS の時代、クラッシュしたハードディスク (FAT16) のサルベージを手でやった経験あり
(今でいう断片化ファイルは見捨てたけど)
当時は OS を迂回して直接ファイルシステムを操作することが簡単だったので、
知識さえあればその手の操作は難しくなかったっす。
今は OS を迂回してうんぬんが極めて難しいので、当時より知っておくべき知識が増えて困難っす。

> どのようなコードを使えば良いですか?
OS を経由せず直接ハードディスク (や SSD やその他記憶装置) をアクセスする機能が必須。
その際には OS のディスクキャッシュとかウィルス対策ソフトが邪魔だったりするので、
これらを無効化するなり迂回するなりの処理が必須。

ってことで今どきの Windows10 では、軽い気持ちで取り組むにはいささか前提知識が高いかも。
(FAT12/16/32 は詳細資料が公開済みだけど NTFS は内部仕様が非公開だし)


引用返信 編集キー/
■95019 / inTopicNo.3)  Re[2]: 削除済みのファイルにアクセスする方法
□投稿者/ ppp (2回)-(2020/06/13(Sat) 13:14:19)
> 「削除済み」とはこの場合、ゴミ箱に投入した(真に削除処理はまだ)という意味ではなくて
> Win32 API でいうところの DeleteFile で真に削除したもの、ってことで良いのかな?


その通りです。
サルベージソフトを作りたいのですが、
Win32 APIなどでも提供されていないのでしょうか・・・?

NTFSの仕様が非公開とのことなのですが、
完全削除ソフトや復元ソフトはどうやって開発しているのでしょうか・・・?





引用返信 編集キー/
■95021 / inTopicNo.4)  Re[3]: 削除済みのファイルにアクセスする方法
□投稿者/ 774RR (790回)-(2020/06/13(Sat) 17:18:23)
UndeleteFile() みたいな Win32 API は無いっすね。

> 完全削除ソフトや復元ソフトはどうやって開発しているのでしょうか・・・?
完全削除のほうは簡単で、ファイルシステムの微妙な内部仕様などは知る必要がなくて、
数回のファイル内容の上書き+ファイル情報の削除でほぼ十分っす。
細かいこと言うと米国国防総省仕様がうんぬんとかありますけど。
# SSD なら TRIM するだけでほぼ絶対に復元できない

NTFS1.0 だったら Windows NT 3.1 の頃なので 1994 年
NTFS3,1 でも Windows XP だから 2001 年
20年の余裕があったわけで、実用に困らない程度には解析済みなんでしょ。
でもサードパーティが分析した結果が正しいとは限らないわけで
Microsoft の OS 以外から NTFS をアクセスすることに絶対の信頼を置くわけにはいかないですね。

作りたいという意欲は評価するけど、オイラが実用するには既に実績のあるソフト買ってきちゃうだろうな。

引用返信 編集キー/
■95022 / inTopicNo.5)  Re[3]: 削除済みのファイルにアクセスする方法
□投稿者/ Azulean (1157回)-(2020/06/13(Sat) 20:17:00)
2020/06/13(Sat) 20:21:01 編集(投稿者)

No95019 (ppp さん) に返信
> その通りです。
> サルベージソフトを作りたいのですが、
> Win32 APIなどでも提供されていないのでしょうか・・・?


チャレンジされている方はいらっしゃいますね。
https://qiita.com/kusano_k/items/45b0a86649aabb8040ff

ただ、内容が合っているかどうか、私には判断がつかないので自己責任で。
この内容を読んで、モチベーションを維持できない、途中で読むのをやめようという気持ちになった場合は、素直に諦めた方が良いかと思います。

(この手の内容を VB.NET で書く人はいないと思うので、Win32API + C ソースを読む努力は必要だと思う)


No95021 (774RR さん) に返信
> 作りたいという意欲は評価するけど、オイラが実用するには既に実績のあるソフト買ってきちゃうだろうな。

復元できないケースもよくあるので、バックアップソリューションを提案したいところですね。
// 前述の記事を読むと、4GB 以上の復元は困難な世界らしい。
引用返信 編集キー/
■95023 / inTopicNo.6)  Re[4]: 削除済みのファイルにアクセスする方法
□投稿者/ 774RR (791回)-(2020/06/14(Sun) 06:20:48)
オイラ個人のデータに関しては内蔵 SSD + 外付けハードディスクに複写で複数個を保持
会社の仕事ソースコードは分散型ソースコード管理ツールで複数個所に保持+マスターリポジトリを別途テープ等にバックアップ
てとこで、削除ファイルの復元が必要な状況ってのは(仕事上は)まず「無い」ですね。

っていうか今時のフツーの職業プログラマは皆この程度の運用はしているはずで、ゆえに
・ソースコードに関して復元ソフトが必要となる状況がそもそも無い
・コンパイラや OS に関しては再インストールのほうが安定していて復元ソフトの出番がない
・1ファイル 4GiB 超って、たいていは DVD-ISO で再ダウンロードすれば事足りるぢゃん

というわけでオイラが自分でファイル復元ソフトを作る(ための学習をする)動機が全くないっす。
ppp 氏がやってみたいなら技術的応援はいくらでもするけれども、オイラ個人がファイル復元ソフトを作る動機はなくて
他の有意義なことに時間使いたいかも、と思ってしまうのであります。



引用返信 編集キー/
■95204 / inTopicNo.7)  Re[5]: 削除済みのファイルにアクセスする方法
□投稿者/ 774RR (802回)-(2020/07/01(Wed) 13:18:47)
https://www.microsoft.com/ja-jp/p/windows-file-recovery/9n26s50ln705
こんなものが公開されたっす。感無量っす。
まだ使っていないので感想等は略。特に 4GiB 超ファイルが復活できるかどうかは不明。


引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ