我正在为Windows Embedded Compact 7
操作系统的设备编写驱动程序,其中用.NET 3.5
编写的应用程序将运行。我的需求是,我需要向这些应用程序发送一些自定义的系统事件(对于在驱动程序中发生的某些情况),以便在调用事件时执行应用程序中编写的相应事件处理程序。
我应该怎么做来调用/引发这样的事件?
要使用哪个函数?
系统事件与消息有何不同?
如何在.NET
应用程序中添加事件处理程序?
TIA。
使用普通的win32 API,我将创建一个命名事件(即为CreateEvent()提供一个名称)。这可以跨进程边界使用,包括跨内核/用户空间边界。然后,您只需使用WaitForSingleObject()和相关函数来检查事件状态。
如果你有一个流驱动程序,你也可以从应用程序中调用ReadFile(),并简单地在驱动程序的相应处理函数中停止。这也使得向事件添加数据变得非常容易。此外,它提供了访问驱动程序的不同进程之间的分离,甚至是同一进程中的不同实例之间的分离。与上面的事件相比,上面的事件是有效的系统范围可见的,也可以由不同的进程设置,尽管您可以在某种程度上限制这一点。
另一种选择是使用窗口消息(PostMessage(), SendMessage()等),它们也可以跨进程边界工作。我不确定这是否适用于内核。然后,这些将在"正常"消息队列中结束,例如应用程序主窗口或您之前告诉驱动程序的任何其他窗口。与其他两种方法相比,您需要一个窗口作为目标,因此它只能以一种方式工作,并且您不知道消息来自何处。