Windows 用、Win32 API + C++20 製のバイナリエディタ方式ディスクセクタエディタです。 64 ビットアドレスで物理ドライブ / ボリューム / イメージファイルを扱い、 「ファイルヘッダーサーチ」でディスク上のファイルを見つけて 抜き出さずに直接再生、 格納フォルダ(削除済みを含む)の特定、フォルダ丸ごとコピー ができます。
English: 64-bit disk sector editor for Windows (Win32/C++20) with file-carving based rescue features: header search for video/audio/document/image/archive formats with structural size estimation, direct streaming playback without extraction, NTFS/FAT/exFAT indexing (including deleted entries) to identify the containing folder and copy it wholesale, a "user folder search mode" that locates
C:\Users\<name>in milliseconds via$I30and integrates$Recycle.Bin, and free-space-only scanning. Portable (INI next to the exe). MIT License.
- Visual Studio 2026(プラットフォームツールセット v145)、x64 のみ
DiskSectorEditor.slnを開いて Debug / Release をビルド →bin\Release\DiskSectorEditor.exe- 追加ライブラリ不要(comctl32 / ws2_32 / shlwapi / shell32 / ole32 のみ)。レジストリは使用せず、設定は exe と同じフォルダの INI に保存(ポータブル)
- マニフェストで 管理者権限(requireAdministrator) を要求します。物理ドライブ / ボリュームの生アクセスに必要です。
- 別バージョンの VS で開く場合はプロジェクトのプラットフォームツールセットを再ターゲットしてください。
| ファイル | 内容 |
|---|---|
src/Main.cpp |
メインウィンドウ、メニュー / アクセラレータ処理、アプリ状態 (AppState) |
src/HexView.* |
Stirling 風ヘキサビュー(16 桁アドレス / 16 進 / アスキーダンプ、編集、選択、64bit スクロール) |
src/Device.* |
物理ドライブ・ボリューム・ファイルの統一アクセス。セクタ整列、キャッシュ、不良セクタ再試行(0 埋め)、ドライブ列挙 |
src/Encoding.* |
JIS / Shift_JIS / EUC-JP / UTF-8 / UTF-16LE / UTF-32LE のデコード・エンコード |
src/Search.* |
前方 / 後方バイト列検索 |
src/Signatures.* |
ファイルヘッダのプリセット、妥当性検証とサイズ推定、一括スキャン |
src/FileSystem.* |
MBR / GPT 解析、NTFS / FAT12/16/32 / exFAT の索引構築(削除エントリ含む)、オフセット→ファイル逆引き、パス解決、抽出、フォルダ丸ごとコピー |
src/HttpStream.* |
127.0.0.1 の Range 対応ミニ HTTP サーバ(直接再生用)、プレーヤー起動 |
src/Dialogs.* |
ドライブ選択、書き込み警告、ジャンプ、検索、進捗、プレーヤー設定、ボリューム一覧、位置のファイル情報 |
src/HeaderSearchDlg.* |
ファイルヘッダーサーチの条件ダイアログと結果ウィンドウ |
src/UserSearchDlg.* |
ユーザフォルダサーチモード(Ctrl+U): Users の高速特定、ユーザ列挙、配下ファイル一覧、周辺ヘッダーサーチ |
src/DiskSectorEditor.rc |
メニュー / ダイアログ / アクセラレータ(UTF-8, #pragma code_page(65001)) |
docs/manual.html |
同梱マニュアル(ヘルプ→マニュアル / F1。ビルド後に exe 横へコピーされます) |
| キー | 機能 |
|---|---|
| Ctrl+D | ドライブ / ボリュームを開く(既定はディスクリードモード = 読み取り専用) |
| Ctrl+O | ファイル / イメージを開く(ドラッグ&ドロップ可) |
| Ctrl+J | アドレス指定ジャンプ(16 進 / 10 進 / セクタ番号、+/- で相対) |
| Ctrl+F / F3 / Shift+F3 | 検索(16 進数列 or 文字列。文字列は選択した文字コードでエンコードして検索) / 次 / 前 |
| Ctrl+H | ファイルヘッダーサーチ |
| Ctrl+U | ユーザフォルダサーチモード |
| Ctrl+I | カーソル位置のファイル情報(所属ファイル / フォルダ、削除状態、抽出・フォルダコピー) |
| Ctrl+PageUp / PageDown | 前 / 次のセクタ |
| Ctrl+S | 変更をデバイスに書き込む(書き込み可能モードのみ) |
| Tab | 16 進ペイン ⇔ アスキーペイン |
| Shift+矢印 / ドラッグ | 範囲選択(ファイル→選択範囲をファイルに保存) |
表示→アスキーダンプの文字コード で JIS / SJIS / EUC / UTF-8 / UTF-16 / UTF-32 を切り替えられます。
既定は読み取り専用です。「ドライブを開く」の「書き込み可能モードで開く」または 編集→書き込み可能モード を選ぶと
警告ダイアログが出ます。半角大文字で WRITE と入力しないと OK が押せません(誤操作防止)。
編集したバイトは赤で表示され、Ctrl+S で確認のうえ書き込みます。
マウント中ボリュームが含まれる領域への物理ドライブ経由の書き込みは Windows が拒否します(ボリューム \\.\X: を開くか、オフラインにしてください)。
ヘッダーサーチ結果・ユーザフォルダサーチ結果のどちらの一覧でも、選択したファイル(複数可)を「選択ファイルシュレッダー」でゼロフィルし、物理的に復元不能にできます。
読み取り専用モードではボタンが無効です。実行前に件数・合計サイズ・対象名を表示し、SHRED と入力しないと実行されません。
FS 解決済みの項目は断片化していても全エクステントを、未解決のヒットは推定範囲を上書きします。NTFS の MFT 常駐データはセクタ末尾の USN を保持したまま中身だけ 0 にします。
実行前に索引で使用中ファイルとの重なりを検査し、重なりがあればそのパスを警告に列挙します(索引に無いデータとの重なりは検出できません)。
注意: 使用中ファイルは名前が残り中身だけ 0 になります。削除済み領域を上書きすると、その領域を再利用中の別ファイルも壊れます。**無関係なファイルが破壊されるリスクがあるため、原則は破棄する予定のメディアでご利用ください。**SSD では論理的に 0 になりますが物理セルの消去は保証されません。
プリセット:
-
動画: AVI, WMV/ASF, MP4/MOV/M4A, FLV, MPEG-TS(188), M2TS(192)
-
音声: WAV, MP3(ID3v2 / フレーム同期), FLAC
-
文書: DOC/XLS/PPT/MSG(OLE2 複合ファイル。ディレクトリ名で種別判定), DOCX/XLSX/PPTX(OOXML。ZIP より優先判定し、内部パスで種別判定), PST(ANSI/Unicode、ヘッダの EOF 位置からサイズ確定), PDF(最後の %%EOF まで。増分更新対応)
-
画像: TIFF(LE/BE、IFD・ストリップ・EXIF を辿る), BMP, GIF(ブロック走査), JPEG(ベースライン/プログレッシブ、EOI まで), PNG(IEND まで)
-
その他: EXE(PE), ZIP, 7z, RAR4, RAR5
-
各ヒットはヘッダ構造を実際に解析して誤検出を減らし、ファイルサイズを推定します(
?付きは推定上限)。 -
「検出ファイル内部はスキップ」で MP3 フレームや TS パケットごとの多重ヒットを抑えます。
-
「□ より小さいファイルは除外」:
100/512KB/1.5MB/1GBのように入力すると、推定サイズがそれ未満のヒットを除外します(空欄=制限なし)。動画検索で数十 KB のゴミを弾くのに有効です。 -
結果ウィンドウの列ヘッダをクリックすると、種別 / オフセット / サイズ / 詳細 / 状態 / パス / フォルダでソートできます(再クリックで昇順⇔降順、# は検出順)。ユーザフォルダサーチの一覧も同様です。
-
「削除ファイルのみを対象」(既定 ON): 使用中ファイルに属するヒットを除外します。索引に該当のない空き領域のヒット(孤立ファイル)は残します。
-
「拡張子が違うものを除外」(既定 ON): FS 上の実ファイルの拡張子が形式と合わないヒット(例: MP3 検索で DLL 内のフレーム同期、PPT に埋め込まれた JPEG)を除外します。どちらかが ON のときは FS 解決が自動で有効になります。
-
「ファイルシステム情報を解決」で、ヒット位置がどのボリュームのどのファイル(パス)に属するか、 削除済みか、格納フォルダはどこかを表示します。
-
壊れかけたディスクでは「現在位置から」「開始 / 終了」で範囲を絞ってください。全面スキャンを避けられます。
- ジャンプ: ヒット位置へ移動
- ダブルクリック: そのファイルを開く(直接再生/実行と同じ)
- 直接再生 / 実行: 内蔵 HTTP サーバ (
http://127.0.0.1:ポート/s/…) でディスクから直接ストリーミングし、プレーヤーで開きます。 ファイルは一切書き出しません。FS 解決済みなら断片化していても実際のクラスタ配置で配信します。 プレーヤーは ツール→再生プレーヤーの設定 で指定(未指定なら VLC → mpv → MPC → WMP → 既定ブラウザ の順に自動検出)。 AVI / WMV / TS など、ブラウザが扱えない形式には VLC を推奨します。 - 一時展開して開く: 文書 / 画像 / EXE / ZIP / 7z / RAR など、ストリーミングできない種別を
temp\に展開して関連付けで開きます(「直接再生/実行」を押した場合も自動でこちらになります。EXE のみ実行確認あり)。 - 抽出して保存: ヒット位置から推定サイズ分の連続領域をファイルに保存。複数選択(Shift/Ctrl+クリック)時は保存先フォルダを選び、
rescue_<オフセット>.<拡張子>で一括保存。 - FS 経由で抽出: ファイルシステム上の実エクステント(断片化対応)でファイルを保存。複数選択時は保存先フォルダへ元のファイル名で一括保存(同名は連番)。
- フォルダ情報: 所属ファイル / フォルダの詳細を表示。
- フォルダ丸ごとコピー: ヒットしたファイルの格納フォルダを、削除済みファイル / サブフォルダを含めて丸ごと指定先へコピーします。
コピー先に
_rescue_log.txt(失敗・不良セクタ・クラスタ連続仮定などの注意)を出力します。
「全部は要らない。C:\Users<特定ユーザ> の中身だけ欲しい」ための最短経路です。
- Users の特定(最速): NTFS ではルートの
$I30ディレクトリインデックスを直接読み、Users(Documents and Settingsも可)を見つけます。MFT 全走査は行わないため、壊れかけたディスクでも読むのは数十セクタです。 - ユーザ列挙:
Usersのインデックス(INDEX_ROOT / INDEX_ALLOCATION)を読み、使用中ユーザに加えて インデックス未使用領域(スラック)に残った削除ユーザ名 も復元して表示します。 見つからない場合は「削除ユーザも探索(MFT全走査)」で、親が Users の削除ディレクトリレコードを MFT から拾います。 - ユーザを選ぶ: そのユーザ配下にあったファイルを、削除分も含めて列挙します(MFT レコードが残っているもの)。絞り込み(文字を入力して「絞り込み」ボタンまたは Enter で適用。大量ファイルでも入力中に固まりません)・削除のみ表示、ジャンプ、直接再生、選択抽出(フォルダ構成を再現)、ユーザ全体の丸ごとコピーができます。
レコードが別ファイルに再利用されている場合は警告します。
3b. ごみ箱の統合:
$Recycle.Bin\<SID>の$Iファイル(元パス・サイズ・削除日時を保持)を読み、元パスが\Users\<ユーザ>\配下のものを一覧に[ごみ箱] 元の相対パスとして自動で加えます。ごみ箱を空にした後の削除済み$I/$Rペアも対象です。抽出・ユーザ全体コピー時は元のファイル名で_ごみ箱\配下に復元します。 - 周辺ヘッダーサーチ(全力探索): 対象領域を「ユーザのファイル周辺(±8MB、32MB 以内の隙間は連結)」「ボリュームの空き領域全体(NTFS
$Bitmap/ FAT エントリ / exFAT 割り当てビットマップから未割り当てクラスタを列挙。使用中領域は読まないので全体スキャンより速い)」「両方」から選んでヘッダーサーチを行い、 実行前に スキャン対象のファイル形式と最大ヒット数を選択 します(形式を絞るほど高速。JPEG / MP3 フレーム同期は候補が多く時間がかかります)。 MFT レコードまで上書きされて索引に残っていないファイルを NTFS の近傍割り当て特性を利用して拾い上げます。使用中ファイルに属するヒットは除外し、結果は Ctrl+H と同じ結果ウィンドウに出ます。
FAT / exFAT ボリュームでは手順 1〜2 にディレクトリ索引(高速)を使い、以降は同じです。
- NTFS: MFT を全走査し、未使用レコード(削除ファイル)もデータランが残っていれば復元します。親ディレクトリが再利用されている場合は
<親フォルダ再利用済み>と表示。圧縮 / 暗号化ファイルは生データのまま出力します。 - FAT12/16/32: 削除エントリ (0xE5) は FAT チェーンが消えているため クラスタ連続を仮定 して復元します(断片化していた場合は一部が別データになります)。LFN が残っていれば元のファイル名で復元します。
- exFAT: NoFatChain フラグのファイルは連続、それ以外は FAT を辿り、消えていれば連続を仮定します。
- 索引構築はボリューム単位で初回のみ行い、進捗ダイアログで中止できます(ツール→ファイルシステム索引を構築 で再構築)。
- 不良セクタはセクタ単位で再試行し、読めなければ 0 で埋めて続行します(抽出ログに記録)。
本ツールは管理者権限で動作しますが、「直接再生」「一時展開して開く」「コピー先フォルダを開く」で起動する外部アプリ(プレーヤー、Acrobat Reader、Explorer 等)は ログオン中ユーザの通常権限で起動します。管理者のまま起動すると、Acrobat Reader のようにサンドボックスを使うアプリが画面に出ずプロセスだけ増える、 ブラウザのプロファイルが別になる、といった問題が起きるためです。手順は次の順で試します。
- デスクトップ(Explorer)の Shell オートメーション
IShellDispatch2::ShellExecute経由(Explorer と同じ中整合性で起動、関連付けも Explorer と同じ) - Explorer のプロセストークンを複製して
CreateProcessWithTokenW - 上記が使えない環境(Explorer が動いていない等)では通常の
ShellExecute(管理者のまま。エラー欄にその旨を表示)
一時展開先は、救出対象(多くはシステムドライブ)への書き込みを避けるため 実行ファイルと同じフォルダの temp\ です(USB から起動すれば USB 側に書かれます)。そこに書けない場合のみ %PUBLIC%\DiskSectorEditor_Temp\ を使います(ツール→一時ファイルフォルダを開く)。
設定はレジストリではなく、実行ファイルと同じフォルダの DiskSectorEditor.ini(UTF-16LE)に保存します。USB メモリに exe と ini を置くだけで環境を持ち運べます。
そのフォルダに書き込めない場合(Program Files 配下など)だけ %APPDATA%\DiskSectorEditor\DiskSectorEditor.ini にフォールバックします。実際に使われているパスは ヘルプ→バージョン情報 に表示されます。
| セクション | 内容 |
|---|---|
[General] |
PlayerPath(再生プレーヤー)、Encoding(アスキーダンプ文字コード)、JumpMode、FindHex / FindForward |
[Window] |
メインウィンドウの位置・サイズ・最大化 |
[HeaderSearch] |
MaxHits、SkipInside、ResolveFs、DeletedOnly、ExtMatch、WholeDisk、MinSize |
[Signatures] |
プリセットごとの有効/無効(シグネチャ名=1/0) |
tests/ に Linux 上で動くテスト一式があります(mingw-w64 クロスビルド+wine)。合成した動画 / 音声 / 文書 / 画像 / アーカイブを FAT32 / NTFS / exFAT イメージに書き込み、
一部をフォルダごと削除したうえで、索引構築・全ファイル抽出のバイナリ一致・削除フォルダの丸ごと復元・ヘッダーサーチの検出数・空き領域列挙を検証します。
GitHub Actions でも push ごとに実行されます(.github/workflows/build.yml)。
bash tests/build_mingw.sh && bash tests/run_tests.shMIT License(LICENSE 参照)。
- 64bit (x64) 専用です。
- FLAC のサイズはフレーム長が可変のため STREAMINFO からの上限推定です(再生には支障ありません)。
- ReFS / ext4 など他のファイルシステムは「FS 不明」となり、ヘッダーサーチによる抽出のみ可能です。
- ストリーミングサーバは 127.0.0.1 にのみ待ち受けます。