1

C:\Windows\system32とのファイルを列挙しようとしていますC:\Windows\SysWow64。しかし、ファイルが不足しcsrss.exeておりlsass.exe、おそらくそれ以上のファイルがありません。これらの2つのファイルのみを確認しました. これらのファイルはあります。Total Commander と Explorer で見ることができます。それらは列挙結果に含まれていません。

List<string> result = new List<string>(Directory.EnumerateFiles("C:\\Windows\\system32", "*.exe", SearchOption.TopDirectoryOnly));

同じ結果DirectoryInfoの代わりに使用してみました。Directoryこれも試しました:

List<string> result = new List<string>(Directory.EnumerateFileSystemEntries("C:\\Windows\\system32", "*.exe", SearchOption.TopDirectoryOnly));

この:

var dir = new DirectoryInfo("C:\\Windows\\system32");
var result = dir.EnumerateFiles("*.exe", SearchOption.TopDirectoryOnly);

変数 'result' は空ではありませんが、言及されたファイルが含まれていません。

フレームワークのバージョン: v4.0.30319

Windows7: 6.1.7601 x64

注: 回避策を使用dir /a-d /b C:\Windows\system32して、出力を解析できることはわかっています。しかし、これは避けたいと思います。

4

1 に答える 1

3

これは、File System Redirectorがリクエストを SysWOW64 にリダイレクトするためです。SysWOW64 には、これら 2 つの実行可能ファイルが含まれていません (これらは常に 64 ビット モードで実行される OS によってのみ必要とされます)。

プロジェクトを 64 ビットとしてビルドすると、プロセスに十分な権限があれば、これら 2 つのファイルが結果に含まれているはずです。

Wow64DisableWow64FsRedirectionまたは、呼び出しの前にP/invoke 呼び出しを実行して、EnumerateFilesファイル システムのリダイレクトを無効にすることもできます。完了したら、必ず再度有効にしてください。

この関数の Pinvoke シグネチャは次のとおりです。

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
于 2015-05-06T11:55:34.967 に答える