delphi - 如何过滤 Windows 中执行的应用程序?

标签 delphi winapi dll hook

我有一些应用程序的 CRC32 或 MD5 校验和列表。我将从 delphi 应用程序中禁用此应用程序的执行。因此,我需要在 DLL 内创建一个到 CreateProcess(或 CreateProcessW?)的系统范围 Hook ,以使该 Hook 成为系统范围的 Hook 。当我的应用程序运行时,您会收到所有已执行应用程序的通知,计算它们的哈希值,与我的列表进行比较并允许/禁止它们的执行。关于如何制作一个为 CreateProcess 创建 Hook 并从 Delphi 应用程序使用的 Dll 的一些技巧?

感谢并为我糟糕的英语感到抱歉!

最佳答案

你不能像你描述的那样只 Hook 内核级函数,这对操作系统来说是可怕的。但是,您可以通过使用 DLL 注入(inject)每个进程来接近这一点,但这在您的情况下不起作用,因为在任意进程有机会启动之前您需要一个钩子(Hook)。据我所知,有两种“正确”的方法(即使用记录的 API):

  1. 使用File System Filter Drivers 。因此,您需要 DDK 来开发驱动程序来执行此任务。这很可能是防病毒软件用来阻止应用程序执行等的方法。它似乎是跨 Windows 版本最兼容的。也是预期的方式。

  2. 使用AppLocker 。这更像是一个系统管理员工具,但具有足够的fiddling with its PowerShell API ,您实际上可以为应用程序和/或脚本执行策略创建规则。当以编程方式执行此操作时,这可能是一种更困惑的方法。 Windows 版本之间的兼容性也较差(仅限 7 及更高版本)。

您可能对这个问题感兴趣:How to trap file access attempts with a filter driver (kernel) and offer dialog to allow/deny (user)?

关于delphi - 如何过滤 Windows 中执行的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508957/

相关文章:

windows - Windows Socket #10060 错误(WSAETIMEDOUT - 尝试连接超时但未建立连接)是否完全是编程错误?

delphi - 如何创建一个不可销毁的实例

delphi - Delphi中的析构函数为什么这么命名?

c++ - 使用 Windows 消息循环实现回调

delphi - IP黑名单TcpServer

C、Windows API递归导航子目录

windows - 使用 KBDLLHOOKSTRUCT 确定第一次按键

c++ - 为什么不允许使用 "second C linkage of overloaded function"?

c# - dll 请求的执行级别

c++ - 我选择什么项目模板来制作 C++ DirectX DLL?