找不到 csrss.exe

Posted

技术标签:

【中文标题】找不到 csrss.exe【英文标题】:Unable to find csrss.exe 【发布时间】:2020-12-15 18:17:02 【问题描述】:

我正在尝试以数字方式验证一些 Windows 进程,其中之一是 csrss.exe。

我尝试了两种技术,第一种是这样的:

IntPtr phCertStore = IntPtr.Zero;
IntPtr phMsg = IntPtr.Zero;
IntPtr ppvContext = IntPtr.Zero;
int pdwMsgAndCertEncodingType = 0;
int pdwContentType = 0;
int pdwFormatType = 0;
if (!Crypt32.CryptQueryObject(
    Wincrypt.CERT_QUERY_OBJECT_FILE,
    @"C:\windows\system32\csrss.exe",
    Wincrypt.CERT_QUERY_CONTENT_FLAG_ALL,
    Wincrypt.CERT_QUERY_FORMAT_FLAG_ALL,
    0,
    ref pdwMsgAndCertEncodingType,
    ref pdwContentType,
    ref pdwFormatType,
    ref phCertStore,
    ref phMsg,
    ref ppvContext
))

    Console.WriteLine((new Win32Exception(Marshal.GetLastWin32Error())).Message);
    Console.ReadLine();
    return;

int pcbData = 0;
if (!Crypt32.CryptMsgGetParam(phMsg, Wincrypt.CMSG_ENCODED_MESSAGE, 0, null, ref pcbData))

    Console.WriteLine((new Win32Exception(Marshal.GetLastWin32Error())).Message);
    Console.ReadLine();
    return;

byte[] pvData = new byte[pcbData];
Crypt32.CryptMsgGetParam(phMsg, Wincrypt.CMSG_ENCODED_MESSAGE, 0, pvData, ref pcbData);
var signedCms = new SignedCms();
signedCms.Decode(pvData);
try

    signedCms.CheckSignature(false);
    Console.WriteLine("Signature check passed");

catch (Exception e)

    Console.WriteLine(e.Message);

finally

    Crypt32.CryptMsgClose(phMsg);
    Crypt32.CertCloseStore(phCertStore, 0);


Console.ReadLine();

第二个是这样的:

ProcessStartInfo processStartInfo = new ProcessStartInfo(@"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", $"Get-AuthenticodeSignature -FilePath " + "\"C:\\windows\\system32\\csrss.exe\"");
processStartInfo.RedirectStandardOutput = true;
processStartInfo.UseShellExecute = false;

Process process = new Process();
process.StartInfo = processStartInfo;
process.Start();
process.WaitForExit();

string output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);

但是,这两个都说找不到文件!复制到另一个 powershell 实例中的完全相同的 powershell 参数有效!如果我将任何路径更改为另一个签名文件,它就可以工作! 我什至尝试以管理员身份运行,但仍然找不到文件! 我做错了什么?

【问题讨论】:

你的项目设置是什么?确保未选中 x64 并选中 x86。 如果您的进程是 32 位的,它将找不到该文件,因为它在 SysWOW64 中不存在。 【参考方案1】:

解决此问题的方法是使用正确的位数。

【讨论】:

以上是关于找不到 csrss.exe的主要内容,如果未能解决你的问题,请参考以下文章

找不到localhostweb页面

java为啥每次都是找不到文件。找不到文件?

java 枚举 找不到符号

bat系统找不到指定文件怎么办?

java package找不到符号

SpringBoot报找不到 dao 问题