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

5
我试图构建一个非常简单的驱动程序。它的唯一目的是注册 "PsSetCreateProcessNotifyRoutine" 并在内核接收到来自回调的通知后,通知我的 Win32 应用程序有哪些进程已启动和停止。
我只知道如何使用 "DriverEntry" 和 "DriverUnload" 构建这样一个简单的驱动程序,并使用 DDK 编译它。但我不知道如何实际实现通信。我知道可以使用 IOCTL 来完成。但除此之外,我一无所知。我找不到关于如何在 Delphi 中做到这一点的简单示例。我只知道它是可行的。
所以我正在寻找一些简单易懂的教程或者更好的例子,配合驱动程序代码使用 Delphi。也许还有其他的通信方式。
任何帮助都将不胜感激。

2
Runner,请查看此问题:https://dev59.com/UE_Ta4cB1Zd3GeqPD8tv#3489779。WMI具有`ExecNotificationQuery`事件,与`Win32_Process`类一起使用可以检测进程何时启动或停止。 - RRUZ
谢谢信息。通常我不喜欢 WMI,但在这种情况下值得一试。即使非常有效,驱动程序在这里真的是一个相当激进的选择。 - Runner
@RRUZ,你的评论非常好,但我接受了他自己的答案,那也很好,并且回答了实际问题。 - Runner
1个回答

2
无论是否在Delphi中,都需要使用函数DeviceIoControl。阅读MSDN中的文章了解更多信息。
简而言之,您需要从可用集合中选择一些IOCTL代码。然后,您调用DeviceIoControl并使用其中一个代码传递一些数据,在驱动程序中处理该请求并返回其他内容。
您还可以处理标准的IOCTL,例如通过在用户模式下调用ReadFile或WriteFile生成的IOCTL。
不要寻找“如何在Delphi中进行此操作的教程”,只需查找任何教程即可。它们都是相同的,无论使用哪种语言,都是纯Win32 / Native api内容。这里有一个示例,我刚刚搜索到的。

谢谢,我会看一下。我说Delphi示例,因为通常你需要定义常量、函数原型等或查找已经定义的内容。如果不必要,我不想再去做这些工作。我不是在寻找捷径,只是希望借鉴那些已经完成了这些工作的人的知识。 - Runner
2
几乎所有API头文件的翻译都可以在JEDI(http://delphi-jedi.org/)上找到。但我认为你不需要太多来自用户模式的东西,只需要DeviceIoControl和标准Win32函数(如CreateFile等),这些都在Windows.pas中定义。 - himself

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接