阅读:1299回复:3
关于SSDT HOOK后通过事件通知应用程序问题
HOOK SSDT应该没有问题通过DbgPrint在自己的函数中显示被HOOK的信息一切正常但是通过事件通知应用程序时却有时候会蓝屏
驱动: 在列程序IRP_MJ_WRITE中 通过 RtlCopyMemory(&hEventApp,Irp->AssociatedIrp.SystemBuffer,4); ObReferenceObjectByHandle(hEventApp,EVENT_MODIFY_STATE,*ExEventObjectType,Irp->RequestorMode,(PVOID*) &pEventApp,NULL); 得到用户应用程序传来的事件对象指针 然后在自己定义用来代替被HOOK的函数的函数里用如下代码激发事件 if(pEventApp!=NULL) { KeSetEvent(pEventApp, IO_NO_INCREMENT, TRUE); KeClearEvent(pEventApp); } ====================================================================== 应用程序: hShareE = CreateEvent(NULL,TRUE,FALSE,"jwtEvent");//创建事件 DWORD t; HANDLE fh = CreateFile("\\\\.\\jwtddk", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); WriteFile(fh,&hShareE,4,&t,NULL);//将事件句柄传到驱动中 然后在应用程序中创建一个线程等待事件发生代码如下: UINT __cdecl mySingle( LPVOID pParam ) { while(1) { //阻塞等待 WaitForSingleObject((HANDLE) pParam,INFINITE); //通知用户 AfxMessageBox("jwt Event!");//这句写与不写有时候均出线蓝屏 } return 0; } 请大侠赐教 |
|
最新喜欢:xdev |
沙发#
发布于:2007-08-29 16:24
得到事件句柄应该通过METHOD_NEITHER吧。
|
|
板凳#
发布于:2007-09-03 09:07
问题解决了
问题出在KeSetEvent(pEventApp, IO_NO_INCREMENT, TRUE); 最后一个参数要用false |
|
地板#
发布于:2007-09-18 13:38
多謝樓主分享經驗
|
|