windows - 如何在windows上唯一标识一个进程?

标签 windows process

让我们以记事本为例。我如何才能在我的应用程序中 100% 确定记事本是否正在运行? 我 100% 的意思是,如果有另一个名为“notepad.exe”的进程实际上不是一个真正的记事本,而是一个仿制品,我不想检测到它。只有真正的记事本。

我已经考虑过读取进程内存,但它比看起来更难,因为内存位移等。

标准方法是按名称,对吗?但对我来说,它真的很重要,它不是任何其他程序,因为我想与之交互,如果我发现错误的进程,将会严重失败。

有谁知道这样做的好方法吗?

PS:没有特定的编程语言可以做到这一点。如果可能的话,我更喜欢一个独立的解决方案。但如果需要,我会专门使用 .Net/C#。

最佳答案

要 99.9%1 确定您正在查看正确的可执行文件的唯一方法是验证文件的 digital signature .例如,您要确保所讨论的 notepad.exe 是由“Microsoft Corporation”签名的。

我会做这样的事情:

  1. 获取正在运行的进程列表。
  2. 过滤到感兴趣的名称 (notepad.exe)
  3. 获取每个进程的镜像 [可执行文件] 路径。
  4. 验证 Authenticode 签名有效且可信。
  5. 将签名者的姓名与期望值进行比较。
  6. 成功!您可以非常确定这是正确的文件。

此方法避免了诸如必须提前知道文件应该位于何处(这几乎是不可能的——记事本是 installed in two locations )、它的哈希值应该是什么(显然必然会更改)或奇怪的用户行为等问题(用其他文本编辑器替换记事本)。

1 - 当然,不可能 100% 确定。某人真的确定可以使用预期的签名者名称对可执行文件进行自签名,并将证书添加到他们机器的根存储中,从而使签名看起来有效。

关于windows - 如何在windows上唯一标识一个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10984908/

相关文章:

c++ - 使用 C++ 在 Windows 中更新 PATH 环境变量

Javascript 来获取正在运行的进程?

python - 查找 Python 进程及其所有子进程使用的总内存

multithreading - 为什么说 "Don' t 同时格式化软盘的评论在谈论线程和进程时很有趣?

c++ - 一种确保系统托盘图标被删除的方法......保证

python - 有没有比 PIL.ImageGrab.grab() 更好的截屏方式?

c# - 如何显示 C# 窗口服务的系统托盘图标?

windows - 如何在 Dart SDK 的 Windows 中以字符串形式获取路径而无需前导 "slash"?

windows - Delphi:如何向其他应用程序发送命令?

windows - Git 配置命令显示权限被拒绝