konglord
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-02-05
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:1556回复:8

关于应用层和驱动用事件来通讯的问题

楼主#
更多 发布于:2007-01-25 18:52
  我想通过在驱动层设置应用层的某个事件 来触发应用层执行某个函数, 那我用devicecontrol从应用层传给驱动的事件 是应该传事件指针还是事件?  我想应该传事件指针,不知道对不对.

最新喜欢:

pilixuankepilixu...
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-01-25 21:10
Handle类型,内核好转化成KEVENT~
没有战争就没有进步 X3工作组 为您提供最好的军火
konglord
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-02-05
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-26 13:08
应用层这样做:
    hNotifyEvent = CreateEvent (NULL, TRUE, FALSE, NULL) ;
            if( !DeviceIoControl( SysHandle, IOCTL_FILEMON_SETGUIEVENT,
                                        hNotifyEvent, sizeof(hNotifyEvent), NULL, 0, &nb, NULL ))

驱动层:
KEVENT GUIEvent ;
if( InputBufferLength >= sizeof(PKEVENT) ) {

                DbgPrint(("zzFilemon: 设置界面触发对话框事件成功\n"));
                GUIEvent = *(PKEVENT) InputBuffer;

这样对吗? 请赐教
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-26 13:39
用户态:
初始化事件
if( !DeviceIoControl( SysHandle, IOCTL_FILEMON_SETGUIEVENT,
                                       &hNotifyEvent, sizeof(hNotifyEvent), NULL, 0, &nb, NULL ))


在某个线程中等待
::WaitForSingleObject(::g_PsfFcreat_Hevent ,INFINITE);

核心态
几个用到的变量
HANDLE    G_event=NULL;
PVOID    gEventObject;    
OBJECT_HANDLE_INFORMATION   objHandleInfo;            

在IRP_MJ_DEVICE_CONTROL中的某一个
G_event=*((HANDLE *)Irp->AssociatedIrp.SystemBuffer);
status = ObReferenceObjectByHandle(G_event, GENERIC_ALL,
                    NULL,
                    KernelMode,
                    &EventObject,
                    &objHandleInfo);//从HANDLE得到事件对像

事件发生的时候
if (G_event!=NULL)
{
     KeSetEvent(gpsfFcreatEventObject, 0, FALSE);    //引起事件
}
hongpengtao
驱动小牛
驱动小牛
  • 注册日期2006-03-16
  • 最后登录2015-06-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望190点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-26 13:40
事件发生的时候
if (G_event!=NULL)
{
  KeSetEvent(gEventObject, 0, FALSE);    //引起事件
}
konglord
驱动牛犊
驱动牛犊
  • 注册日期2007-01-09
  • 最后登录2007-02-05
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-26 17:17
呵呵 多谢楼上的 我已经搞定了 多谢
另外问下 怎么判断一个进程结束了 我需要在一个窗口关闭的时候做些操作,能知道这个事件吗?
magichere
驱动小牛
驱动小牛
  • 注册日期2007-01-24
  • 最后登录2008-05-07
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望137点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-02-01 15:45
Waitforobject(threadHandle);
创造美好的未来生活!!!
magichere
驱动小牛
驱动小牛
  • 注册日期2007-01-24
  • 最后登录2008-05-07
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望137点
  • 贡献值0点
  • 好评度136点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-02-02 10:12
::WaitForSingleObject(threadHandle,INFINITE);
创造美好的未来生活!!!
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2007-02-02 15:54
判断进程结束?在驱动层的话可以PsSetCreateProcessNotifyRoutine(ProcessCreateMon,FALSE);
游客

返回顶部