質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

4748閲覧

Windows C++ ファイルを復元不可能なように削除する方法 (win32api DeleteFile())

momomomo

総合スコア8

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/04/13 07:17

Windowsアプリでファイルを復元不可能なように削除する方法、簡単に実装する方法をご存知の方がいましたら教えていただけないでしょうか?

通常のファイル削除 DeleteFile()ではデータ部分はHDから削除されずに、ファイルシステムの管理上の情報が削除されると思っています。(NTFSなどのディスク仕様はあまり詳しくありません)

簡単な方法として、削除前に一度ファイルを開いて0xffなどで上書きして、その後に削除をする方法を考えましたが、この方法で確実でしょうか? 同じデータサイズ分を上書きした場合、同じディスク上のセクタ(場所)が利用されるのでしょうか?

詳しい方がいましたら、教えていただければ幸いです。

開発環境
・Visual Studio 2015
・C++ win32API

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

同じデータサイズ分を上書きした場合、同じディスク上のセクタ(場所)が利用されるのでしょうか?

HDDは既存データの上書きは同じ場所に書かれます。ただし、NTFSでの圧縮/暗号化ファイルに関してはそうとは限りません。また、フラッシュメモリ(SSDとかUSBメモリとか)ではあえて異なるセクターに書くような仕組みになっています。

簡単な方法として、削除前に一度ファイルを開いて0xffなどで上書きして、その後に削除をする方法を考えましたが、この方法で確実でしょうか?

NTFSではファイル操作だけで「復元不可能」にするのは不可能です。ただ、ファイル復元ツールなどによる復元を「困難」にする程度であれば、その方法でできると思います。削除する前にファイル名をでたらめなものに変えることもお忘れなく。

物理的に「復元不可能」にしたいのであれば、やはり空き領域を完全消去するcipher等の外部ツールに頼らざるを得ないと思います。

データの保護が目的なら、ファイルへの書き込みの際に暗号化することも検討されると良いでしょう。Windows SDKには暗号化のためのAPI(CryptoAPI/CNG)も提供されています。

投稿2016/04/13 09:35

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一応、現行OSであればNTFSを使用されている事が大半だと思いますので…
それを前提にお話しさせて頂きますね。

ご指摘の通り、Windows上からファイルをを削除すると、NTFSにおけるメタファイルの情報のみを
処理して、実データについてはそのまま残っています。

ファイルを上書きした場合、同じセクタのデータを書き換えていますので、おっしゃる通り、
対象ファイルを開き、0xff等で上書いてしまうのも有りです。

ですが、KoichiSugiyamaさんがおっしゃっている通り、基本的にファイルを開くとスワップファイルが
作成されてきますので、そのファイルが残る事を考えると完全消去とはいかないと思います。

もし、この完全削除が1度だけの処理であれば、ファイル削除後に

cipher /w:ドライブレター

こちらでドライブの空き領域全てを消去することが確実かと思われます。
でも、このコマンド…1ドライブ全体に処理をかけていくのでドライブサイズ次第ですが、
相当時間がかかりますので、繰り返し使用されるのであれば余りお勧めできません。

投稿2016/04/13 07:52

choro-s

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

完全削除の限界と対処法というサイトに結構詳しい解説がありますので、一度じっくり読んでみてください。

投稿2016/04/13 07:26

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問