delphi 应用程序与 Windows NT 系统驱动程序之间的通信

Posted

技术标签:

【中文标题】delphi 应用程序与 Windows NT 系统驱动程序之间的通信【英文标题】:Communication between delphi application and Windows NT system driver 【发布时间】:2010-11-29 16:19:58 【问题描述】:

我正在尝试构建一个非常简单的驱动程序。它的唯一目的是注册“PsSetCreateProcessNotifyRoutine”并在从内核收到的回调中通知我的 Win32 应用程序启动和停止了哪些进程。

我只知道如何用“DriverEntry”和“DriverUnload”构建这样一个简单的驱动程序并用DDK编译它。但我不知道如何实际实现通信。我知道它可以用 IOCTL 来完成。但除此之外,我还在黑暗中。我找不到如何在 Delphi 中执行此操作的简单示例。我只知道可以做到。

所以我正在寻找的是一些简单易懂的教程,关于如何做到这一点或更好地使用带有配套驱动程序代码的示例 delphi 程序。也许还有其他的交流方式。

如有任何帮助,将不胜感激。

【问题讨论】:

Runner check this question ***.com/questions/3489501/… WMI 有ExecNotificationQuery 事件与Win32_Process 类一起可以检测进程何时启动或停止。 感谢您的信息。我一般不喜欢 WMI,但在这种情况下值得一看。司机在这里真的是一个相当激烈的选择,即使非常有效。 @RRUZ,您的评论非常好,但我接受了他自己的回答,这也很好,是实际问题的答案。 【参考方案1】:

是否在 Delphi 中并不重要。您必须使用函数 DeviceIoControl。阅读有关它的article in MSDN。

简而言之,您必须从可用集合中选择一些IOCTL codes。然后,您使用这些代码之一调用 DeviceIoControl 并传递一些数据,然后在驱动程序中处理该请求并返回其他内容。

您还可以处理标准 IOCTLS,例如在用户模式下调用 ReadFile 或 WriteFile 生成的。

不要寻找“如何在 Delphi 中执行此操作的教程”,只需寻找任何教程即可。它们都是一样的,不管是什么语言,都是纯 Win32/Native api 的东西。例如Here's one,刚刚google了一下。

【讨论】:

谢谢,去看看。我说的是 delphi 示例,因为通常您必须定义常量、函数原型等或查找已经做出的定义。如果没有必要,我不想经历这些。我不寻找捷径,只寻找已经这样做的人的知识。 JEDI (delphi-jedi.org) 提供了几乎所有 API 标头的翻译。但我认为你不需要太多的用户模式,它只是 DeviceIoControl 和标准 Win32 函数(CreateFile 等),都在 Windows.pas 中定义。

以上是关于delphi 应用程序与 Windows NT 系统驱动程序之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

Delphi安装NT服务程序时,不出现提示信息

Delphi安装NT服务程序时,不出现提示信息

本地系统服务例程:Nt和Zw系列函数

串行通信 (RTS) 和 Windows 7

delphi下在client端如何获得NT服务器的IP。

Windows 7 与 Delphi 的集成