目录枚举缺失 csrss.exe 和 lsass.exe (c#)

Directory enumeration is missing csrss.exe and lsass.exe (c#)

我正在尝试枚举 C:\Windows\system32C:\Windows\SysWow64 中的文件。但是我缺少文件 csrss.exelsass.exe 可能还有更多,我只检查了这两个文件。 那些文件在那里,我可以在 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 然后解析输出。但我想避免这种情况。

这是因为 File System Redirector 将您的请求重定向到 SysWOW64,它不包含这两个可执行文件(它们只被 OS 需要,它总是 运行 他们在 64 位模式下)。

将项目构建为 64 位时,假设您的进程具有足够的权限,您应该会在结果中看到这两个文件。

或者,您可以在 EnumerateFiles 调用之前对 Wow64DisableWow64FsRedirection 进行 P/invoke 调用以禁用文件系统重定向 - 只需确保在完成后重新启用它.

此函数的 Pinvoke 签名如下:

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);