ファイルを傍受し、特定のディスクにドラッグアンドドロップされたファイルの名前を取得してファイル名を取得するミニフィルターを開発しています。
ファイルをドラッグ アンド ドロップすると、このファイル名を取得して正常にインターセプトできます (つまり、このファイルはディスク上に作成されません)。
複数のファイルをドラッグ アンド ドロップすると、最初のファイル名しか取得できず、他のファイル名は取得できません。しかし、ディスクを開くと、ここにファイルが表示されません (つまり、Mini-Filter がファイルを正常にインターセプトしたことを意味します)。そのため、ファイル名を取得できません(最初のファイルを除く)
それらをリダイレクトしてドラッグ&ドロップをインターセプトします:
- FltGetFileNameInformation()とFltParseFileNameInformation()でファイル名を取得
- 二つに分けて
- 最初は: \Device\HarddiskVolume1\folder\
- 2 つ目: file.ext
- 最初の部分にファイル名を追加します: \Device\HarddiskVolume1\folder\new_file.ext
- ディスク上での作成の傍受
- このバッファを解放します: Data->Iopb->TargetFileObject->FileName.Buffer
- 最初の部分を Data->Iopb->TargetFileObject->FileName に割り当てます
- これを設定します: Data->Iopb->TargetFileObject->RelatedFileObject = NULL;
- Data->IoStatus.Information = IO_REPARSE;
- データ->IoStatus.Status = STATUS_REPARSE;
- FLT_PREOP_SUCCESS_NO_CALLBACK を返します。
上記のコードは、すべてのファイルを傍受して最初のファイル名を取得することしかできません。
複数のファイルをドラッグ アンド ドロップしたときに、各ファイルをインターセプトするにはどうすればよいですか?