如何从驱动程序向应用程序层发送系统事件?

时间:2013-06-10 04:49:44

标签: c++ .net event-handling driver windows-ce

我正在为Windows Embedded Compact 7操作系统的设备编写驱动程序,其中用.NET 3.5编写的应用程序将运行。我的要求是,我需要向这些应用程序发送一些自定义的系统事件(对于驱动程序中出现的某些条件),以便在调用事件时应该执行应用程序中编写的相应事件处理程序。

所以,

如何调用/举起此类活动?

将使用哪个功能?

系统事件与消息有何不同?

如何在.NET应用程序中添加事件处理程序?

TIA。

1 个答案:

答案 0 :(得分:0)

使用普通的win32 API,我将创建一个命名事件(即为CreateEvent()提供一个名称)。这可以跨进程边界使用,包括跨内核/用户空间边界。然后,您只需使用WaitForSingleObject()和相关函数来检查事件状态。

如果你有一个流驱动程序,你也可以从应用程序调用ReadFile(),然后在驱动程序的相应处理函数内停顿。这使得向事件添加数据变得非常容易。此外,它提供了访问驱动程序的不同进程之间的分离,甚至是同一进程中的不同实例之间的分离。将此与上述事件进行比较,该事件在系统范围内可见,并且也可以由不同的进程设置,但您可以在一定程度上限制此事件。

另一种方法是使用窗口消息(PostMessage(),SendMessage()等),它们也可以跨进程边界工作。我不确定这是否适用于内核。然后这些将在例如“正常”的消息队列中结束。应用程序主窗口或您之前告诉驱动程序的任何其他窗口。与其他两种方法相比,您需要一个窗口作为目标,因此它只能以一种方式工作,而您不知道消息的来源。