驱动层与应用层共享事件方法
2010-10-26 21:09
585 查看
在应用中创建事件,然后通过ioctl传给驱动,驱动中ObReferenceObjectByHandle来引用该事件对象。
这样应用和驱动中都可以检查和修改事件状态。
应用程序 创建事件 把句柄传输给驱动:
HANDLE m_hCommEvent = CreateEvent(NULL,
false,
false,
NULL);
// download event object to device driver,
// m_hCommDevice is the device object
DeviceIoControl(m_hCommDevice,
IO_REFERENCE_EVENT,
(LPVOID) m_hCommEvent,
0,
NULL,
0,
dwReturn,
NULL);
应用层使用方法 在需要的地方等待
while(true)
{
WaitForSingleObject(m_hCommEvent, INFINITE);
// After this function, the event is set to
// non signaled. Get information and deal with it.
}
驱动层程序:
case IO_REFERENCE_EVENT: 取得事件对象
hEvent = (HANDLE) irpStack->
Parameters.DeviceIoControl.Type3InputBuffer;
status = ObReferenceObjectByHandle(hEvent,
GENERIC_ALL,
NULL,
KernelMode,
&gpEventObject,
&objHandleInfo);
the gpEventObject is a PRKEVENT object, so we can use KeEventXXX and KeWaitForXXX to operate it.
当事件发生时,置信号
KeSetEvent(gpEventObject, 0, FALSE);
当不再需要事件对象时:
case IO_DEREFERENCE_EVENT: free事件对象
if(gpEventObject)
ObDereferenceObject(gpEventObject);
这样应用和驱动中都可以检查和修改事件状态。
应用程序 创建事件 把句柄传输给驱动:
HANDLE m_hCommEvent = CreateEvent(NULL,
false,
false,
NULL);
// download event object to device driver,
// m_hCommDevice is the device object
DeviceIoControl(m_hCommDevice,
IO_REFERENCE_EVENT,
(LPVOID) m_hCommEvent,
0,
NULL,
0,
dwReturn,
NULL);
应用层使用方法 在需要的地方等待
while(true)
{
WaitForSingleObject(m_hCommEvent, INFINITE);
// After this function, the event is set to
// non signaled. Get information and deal with it.
}
驱动层程序:
case IO_REFERENCE_EVENT: 取得事件对象
hEvent = (HANDLE) irpStack->
Parameters.DeviceIoControl.Type3InputBuffer;
status = ObReferenceObjectByHandle(hEvent,
GENERIC_ALL,
NULL,
KernelMode,
&gpEventObject,
&objHandleInfo);
the gpEventObject is a PRKEVENT object, so we can use KeEventXXX and KeWaitForXXX to operate it.
当事件发生时,置信号
KeSetEvent(gpEventObject, 0, FALSE);
当不再需要事件对象时:
case IO_DEREFERENCE_EVENT: free事件对象
if(gpEventObject)
ObDereferenceObject(gpEventObject);
相关文章推荐
- 如何在驱动层和应用层之间共享事件?
- 驱动与应用层之间的共享内存通信与事件通知
- 应用层与驱动层同步事件处理方法
- 应用层与驱动层同步事件处理方法
- extjs JSONStore的load事件/insert,add方法应用 如何动态改变显示数据
- 总结应用和驱动之间用事件通讯的办法
- UNIX 共享内存应用中的问题及解决方法
- 驱动层与应用层的事件同步(主动防御原理浅析)
- 内存映射 驱动与应用层程序共享内存
- 匿名方法与Lambda表达式,事件,一些应用
- SharedPreferences具体使用方法及createPackageContext方法(获取其他应用的共享文件)
- UNIX 共享内存应用中的问题及解决方法
- Laravel Memcached缓存驱动的配置与应用方法分析
- UNIX 共享内存应用中的问题及解决方法
- 应用程序调用_驱动B调用_驱动A_异步方法1_带完成历程_事件
- UNIX 共享内存应用中的问题及解决方法
- 表单元素的submit()方法和onsubmit事件应用概述
- VB中WinSock控件的属性、方法、事件及应用
- 如何实现驱动层与应用层共享内存?
- SharedPreferences具体使用方法及createPackageContext方法(获取其他应用的共享文件)