問題タブ [ntfs-mft]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - NTFS-MFT 参照番号からファイル情報を取得する
私の C# アプリケーションでは、既にファイル システムを調べる方法がありますが、マスター ファイル テーブル (MFT) からの読み取りを利用したいと考えています。私は、1) 独自の仕様であるため、予告なしに変更される可能性があること、および 2) アプリケーションが管理者権限で実行されている場合にのみアクセスできることを理解しています。
このコードを介してマスター ファイル テーブルを読み取ることができました。MFT クエリから、ファイル名といわゆるファイル参照番号を取得します。私が見つけられないのは、ファイル サイズ、フル パス、日付など、問題のファイル/フォルダーに関する詳細情報を取得できるように、.NET FileInfo オブジェクト、または Windows API ファイル ハンドルに移行する方法です。スタンプなど
c++ - Cを使用してNTFSファイルシステムのメタファイルを読み取る方法
メタファイル ($MFT、$Volume、$Bitmap...) に直接アクセスする方法を教えてもらえますか? これらのファイルから情報を取得する必要があります。
ntfs - NTFS MFT の FILENAME 属性を解釈する方法は?
NTFS MFT を読みました。写真はこちら(4バイト語で左が下位アドレス)
強調表示された領域はファイル名属性です。以下は属性フォーマットです。
ご覧のとおり、dwType は 0x00000030 (FILENAME) で、dwFullLength は 0x00000068 です。wNameOffset は 0x0018、wID は 0x0003 です。これは常駐ケースであり、常駐には dwLength 0x0000004a、wAttrOffset 0x0018、uchIndexedTag 0x01、および uchPadding 0x00 があります。オフセットは属性レコードの先頭から 0x18 なので。以下に示します。
このユニコード文字列の読み方がわかりません。utf-16ですか?すべての文字は 16 ビットですか?
c++ - DeviceIoControl を使用したファイル列挙が C++ よりも VB.NET の方が速いのはなぜですか?
ファイルを高速に列挙するために Windows マスター ファイル テーブル (MFT) を読み込もうとしています。これまで、これを行うための 2 つのアプローチを見てきました。
- DeviceIoControlを使用してJeffrey CoopersteinとJeffrey Richterが提案したように
- 一部のオープンソース ツールおよびNTFS パーサーライブラリで提示されている MFT の直接解析
私のプロジェクトでは、アプローチ [ 1 ] に焦点を当てています。私が直面している問題は、主に実行時間に関連しています。明確にするために、以下は私のシステムと開発環境です。
- IDE - ビジュアルスタジオ 2013
- 言語 - C++
- OS - Windows 7 プロフェッショナル x64
- C++ および .NET コード用に 32 ビットのバイナリが生成されます。
問題
[ 1 ]で言及されているバージョン(わずかに変更されています) と、codeplex で入手可能なVB.NET 実装を比較しました。問題は、内部ループのステートメントのコメントを外すと、C++ コードの実行時間が 7 ~ 8 倍に増加することです。C++ コード (VB コードで利用可能) でパス マッチングを実装していません。
Q1. C++ コードのパフォーマンスを改善する方法を教えてください。
私のマシンで C:\ ドライブを列挙するタイミング:
- C++ (内側のループでコメント化されていないステートメントを使用) -
21 seconds
- VB.NET (追加のパス マッチング コードを使用) -
3.5 seconds
より明確にするために、C++ と VB.NET のスニペットを次に示します。
C++
は次m_nodes
のように定義されていますtypedef std::map<DWORDLONG, CNode*> NodeMap;
VB.NET
は次fFileFound
のように定義されます。
&の構造は次のとおりですFSNode
。CNode
注- VB.NET コードは新しいスレッド (GUI があるため必要) を生成しますが、メイン スレッド (テスト用の単純なコンソール アプリケーション) で c++ 関数を呼び出しています。
アップデート
それは私の側からのばかげた間違いでした。DeviceIoControl
API は期待どおりに機能しています。ビルドDebug
はビルドよりも少し遅いですがRelease
。次の記事を参照してください。
c++ - C++ を使用して ntfs マスター ファイル テーブルを読み取る方法
ディスク上のすべてのファイルを列挙したい。列挙に WinAPI FindFirst/FindNext を使用しています。しかし、この方法はかなり時間がかかります。ディスク上のすべてのファイルに関するすべての情報を含むntfsマスターファイルテーブルを読み取ることにより、非常に高速に列挙できることをどこかで読みました。C ++にntfsマスターテーブルを読み取るためのAPIまたはメソッドはありますか?
python - MFT からファイルサイズを抽出する方法
マスター ファイル テーブル (MFT) の内容を抽出しようとしています。NTFS ボリュームから MFT をコピーし、.bin ファイルとして保存しました。unpack
現在、Python で提供されている関数を使用してこのファイルを読み込もうとしています。このようなファイル レコードのファイル名属性に格納されている実際のファイル サイズに割り当てられた 8 ビットを読み取っています。
私が直面している問題は、取得しているファイル サイズが 3.5e-323 のようになっていることです。MFT はファイル サイズをバイト単位で保存しますが、得られる答えはばかげているようです。それで、私がそれを修正できる方法はありますか?