阅读:1557回复:8
关于应用层和驱动用事件来通讯的问题
我想通过在驱动层设置应用层的某个事件 来触发应用层执行某个函数, 那我用devicecontrol从应用层传给驱动的事件 是应该传事件指针还是事件? 我想应该传事件指针,不知道对不对.
|
|
最新喜欢:![]() |
沙发#
发布于:2007-01-25 21:10
Handle类型,内核好转化成KEVENT~
|
|
|
板凳#
发布于: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; 这样对吗? 请赐教 |
|
地板#
发布于: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); //引起事件 } |
|
地下室#
发布于:2007-01-26 13:40
事件发生的时候
if (G_event!=NULL) { KeSetEvent(gEventObject, 0, FALSE); //引起事件 } |
|
5楼#
发布于:2007-01-26 17:17
呵呵 多谢楼上的 我已经搞定了 多谢
另外问下 怎么判断一个进程结束了 我需要在一个窗口关闭的时候做些操作,能知道这个事件吗? |
|
6楼#
发布于:2007-02-01 15:45
Waitforobject(threadHandle);
|
|
|
7楼#
发布于:2007-02-02 10:12
::WaitForSingleObject(threadHandle,INFINITE);
![]() |
|
|
8楼#
发布于:2007-02-02 15:54
判断进程结束?在驱动层的话可以PsSetCreateProcessNotifyRoutine(ProcessCreateMon,FALSE);
|
|