問題タブ [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.
filesystems - NTFS で MFT を読み取る
MFT の読み取り/書き込み方法の説明を探して Web をさまよいながら、次のセクションを見つけました:( http://www.installsetupconfig.com/win32programming/1996%20AppE_apnilife.pdf )
NtfsProtectSystemFiles が FALSE に設定されている場合、特殊ファイルを開くことができます。ただし、これを試みることにはいくつかの欠点があります。ボリュームをマウントするときに多くの特別なファイルが特別な方法で開かれるため、ZwReadFile への呼び出しから生じる IRP_MJ_READ 要求を処理する準備ができていません。そのようなリクエストを受信するとクラッシュします。これらの特殊ファイルは、ZwCreateSection と ZwMapViewOfSection で特殊ファイルをマッピングし、マッピングされたデータを読み取ることで読み取ることができます。さらなる問題は、いくつかの特殊ファイルが、ファイル オブジェクトへの最後のハンドルが閉じられたときに生成される IRP_MJ_CLEANUP 要求を処理する準備ができておらず、そのような要求が受信されるとシステムがクラッシュすることです。
- 「IRP_MJ_READ 要求を処理する準備ができていない」とはどういう意味ですか?どのような準備が必要ですか? IRP_MJ_READ とは何ですか?
- 「ZwCreateSection と ZwMapViewOfSection で特殊ファイルをマッピングし、マッピングされたデータを読み取る」それはどのように問題を解決しますか?
- 「ファイル オブジェクトへの最後のハンドルが閉じられたときに生成される IRP_MJ_CLEANUP 要求を処理するためのファイルの準備ができていない」とはどういう意味ですか? IRP_MJ_CLEANUP とは何ですか?
- 「特別なファイルへの開いているハンドルを決して終了しないプロセスに複製する」それはどのように問題を解決しますか?
c++ - VC++ - NTFS ブート セクタへの書き込み許可を取得するにはどうすればよいですか?
ブート セクタ (マスター ファイル テーブル) への書き込みアクセスを取得するために、多くの検索を行いました。CreateFile
のような書き込みアクセス パラメータを持つ関数を使用しましGENERIC_WRITE
た。次に、特定のメモリ アドレスに書き込むために使用SetFilePointer
します。WriteFile
しかし、私がいつも得るのはSystem.AccessViolationException
(Windows 7)です。ここで何か間違っていますか?
ブート セクタへの wrtie アクセスを取得するための CreateFile - WriteFile 関数に代わるものがあるかどうか知りたいですか?
または、Interrup Service Routine を使用して VC++ (C++/Cli) の特定のディスク セクターに書き込む方法があるかどうか考えていました。
delphi - Delphi で変更ジャーナルを実装する
Delphi XE2 アプリケーションの変更を追跡する代わりに、Change Journalを使用しようとしていReadDirectoryChangesW
ます (理由: ReadDirectoryChangesW はそれほど信頼できません) 。
delphi/pascal で見つけた最も近いものはDelphi MFT/Journal helpersと呼ばれるもので、 uMFT.pasとuDevNotification.pasの 2 つのパスカル ユニットが含まれています。
上記のコードは MFT を (実際には非常にうまく) 処理しますが、変更ジャーナルに関するものは何もありません。
私はまた、私が望むことをしているように見えるこのC#コードを見つけました.C#だけです
私の質問は、 Delphi XE2コード (または C# コードを変換する方法) を知っている人はいますか?
前述したように、私の目標は を置き換えることReadDirectoryChangesW
なので、最終的には変更ジャーナルとやり取りして、ファイルシステムに変更があったときに通知を受ける必要があります。
delphi - Delphi で変更ジャーナルを実装する(ステップ 2)
前の質問の続きで、このDelphi ユニットを使用して、このEnumMFTEntries() 関数を使用してクレイジーな FAST ドライブ スキャンを実装することができましたが、次のタスクを実行するのに問題があります。
タスク 1: クエリを実行change journal
して、新しく変更されたファイル (変更、名前変更、削除など) を取得します。
関数と StCroixSkipper の USN Journal Explorer (C#)の両方を読んだ後、この壊れたルーチンを適応させました。EnumMFTEntries()
何らかの理由で報告されたファイル名は常に #0 です
タスク #2: スキャンを特定のフォルダーに制限しますか?
私が間違っていなければ、EnumMFTEntries()関数でを定義することで部分的にそうすることができるようですが、それを行う方法は明確ではありません。StartUsn
タスク #3: ファイル名のフル パスを取得しますか?
たとえば、 はEnumMFTEntries()
常に名前のみを返し、その親フォルダーの参照番号も返すため、フル パスを取得する最速の方法は明確ではありません。
これらのタスクは非常に密接に関連しています。Delphi開発者が非常に高速なフォルダ スキャンを簡単に実行できるようにするために、コミュニティがここで役立つことを願っています。その有用性にもかかわらず、変更ジャーナル/MFT は、最も興味深いが忘れられているテクノロジの 1 つです。これは変わらなければなりません!
block - NTFSファイルシステムのMFTからファイルのLBA(論理ブロックアドレス指定)を取得するには?
$MFT ファイルにアクセスし、ファイル属性を抽出しました。
MFT からのファイル属性が与えられた場合、NTFS ファイル システムの MFT レコードからファイルの LBA を取得する方法は?
LBA を計算するには、ファイルのクラスター数を知っています。
クラスター数を使って計算することは可能ですか?
file - NTFS - ファイル レコード サイズ
各 MFT レコードの実際の (ディスク) サイズについて疑問に思っていました。MFT レコードあたりのクラスター数はブートセクターに設定されているため、それぞれのサイズは同じだと思います。
ただし、各レコード ヘッダーには追加の値が格納されます: そのAllocated size
(0x1C)。私が観察できる限り、この値は常にブートセクタに格納されている値と同じでした。
これら2つが異なる可能性はありますか(そしていつ)?そうでない場合Allocated size
、各レコードの値は一種の無駄ですよね?
windows - 最後の NTFS MFT レコードを取得する方法は?
NTFS で MFT を解析するユーティリティを作成しています。ここまでで、1024 バイトの MFT レコードを取得してその属性をトラバースするコードを作成しました。私の知る限り、MFT はレコード番号 0x23 からユーザー ファイルへのレコードの割り当てを開始するため、0x23 から N 個のレコードまでループしています。MFT の最後のレコードに到達する方法を知りたいですか? ある種のエンドマーカーはありますか?MFT レコードのループを停止できるように、特定のレコードが最後のレコードかどうかを知るにはどうすればよいですか。
どんな助けでも大歓迎です。
c - ボリューム フィルター ドライバーが一部のシステム ファイルを監視していない
セクターへの書き込み/変更を監視し、そのセクターのそれぞれのビットを自分のビットマップに設定する上位ボリューム フィルター ドライバーに取り組んでいます。WDK で提供されている diskperf の例をベースとして使用しています。
ほとんどの場合、セクター上のすべての書き込み/変更が監視され、それぞれのビットが設定されます。私の問題は、フィルタードライバーが特定のセクターを監視できないことです。たとえば、$MFT、$MFTMirr などです。
しかし、$LogFile のセクターを追跡することはできます。フィルタ ドライバが $MFT などのシステム ファイル セクタやそのようなファイルを含むすべてのセクタを追跡できるように、すべてのタイプの書き込み IO を処理するために設定する必要がある属性またはフラグの種類を教えてください。
あらゆる種類の助けをいただければ幸いです。前もって感謝します。
ntfs - mft_reference は、異なる時点の 2 つの異なるファイルに対応できますか?
現在、USN ジャーナル ファイルの解析に取り組んでいます。私が知っていることは、USN ジャーナル ログ エントリにはmft_referenceフィールドがあり、MFT テーブル内の対応するFileRecordを参照していることです。
一定期間が経過すると、USN ジャーナル ファイルには、ファイルの追加、ファイルの変更、ファイルの削除など、非常に多くのファイル変更記録が蓄積される場合があります。
USN ジャーナル ファイルの先頭でmft_reference 番号 (64 ビット整数)を取得し、USN ジャーナル ファイルの末尾でmft_refer_1
別の mft_reference 番号を取得mft_refer_2
し、それらの値が等しい場合、mft_refer_1 == mft_refer_2
2 つのジャーナル レコードと言えますか?同じファイルを指定していますか?
よくわからないのは、後で追加されたFileRecordが以前に削除されたFileRecordの位置を置き換えるかどうかです。
前もって感謝します!
windows - NTFS メタデータ/システム ファイルを開く方法: $LogFile、$Volume、$Bitmap?
64 ビットの Windows 7 を実行しています。一部の NTFS システム ファイルに関連付けられている FileID を取得したいと考えています。一部 (「$Mft」、「$MftMirr」) は開くことができますが、他のもの (「$LogFile」および「$Bitmap」) は「アクセス拒否」エラーまたは無効なパラメーター (「$Volume」) で失敗します。管理者としてそれを実行し、ローカル サービスとして実行しようとしましたが、それでも失敗します。私は以下を使用しています:
次の権限も設定しました(やり過ぎだとはわかっていますが、どれが機能するかわかりませんでした):SE_TCB_NAME、SE_DEBUG_NAME、SE_SECURITY_NAME、SE_BACKUP_NAME、SE_RESTORE_NAME、SE_MANAGE_VOLUME_NAME