| 
					阅读:1482回复:14
				 vtoolsd中的异步事件类能否设置事件触发w32的线程?
					同				 | |
| 
 | 
| 沙发#发布于:2002-06-22 12:03 
					我意思是能否用vtoolsd中的自己带的类来做ring0 到ring3的转换?				 | |
| 
 | 
| 板凳#发布于:2002-06-20 14:59 
					谢谢,我懂了!				 | |
| 地板#发布于:2002-06-20 09:59 
					就是将ring3中创建的句柄转化为在ring0级vxd中能够使用的句柄。
 ----------------------------------------------------------------------- \"OpenVxDHandle\",即 pOpenVxDHandle = GetAddressOfOpenVxDHandle(); if (pOpenVxDHandle && *pr3Evt) *pr0Evt = pOpenVxDHandle(*pr3Evt); | |
| 地下室#发布于:2002-06-20 09:12 
					真细心呀。				 | |
| 5楼#发布于:2002-06-20 08:57 
					要使用win32事件编程,你需要先创建一个事件和一个县城,在将ring3级事件句柄转化为ring0级句柄,传给vxd,用这个线程等待vxd发送的事件消息。这样就ok了。
 -------------------------------------------- 就是将ring3中创建的句柄转化为在ring0级vxd中能够使用的句柄。 | |
| 6楼#发布于:2002-06-19 21:13 
					灌水:
 HANDLE (WINAPI *GetAddressOfOpenVxDHandle(void))(HANDLE) { CHAR K32Path[MAX_PATH]; HINSTANCE hK32; GetSystemDirectory(K32Path, MAX_PATH); strcat(K32Path, \"\\\\kernel32.dll\"); if ((hK32 = GetModuleHandle(K32Path)) == 0) return NULL; return (HANDLE(WINAPI *)(HANDLE))GetProcAddress(hK32, \"OpenVxDHandle\"); } //--------------------------------------------------------------------------- BOOL CreateCommonEvent(HANDLE* pr3Evt, HANDLE* pr0Evt, BOOL bManualReset, BOOL bInitialState) { static HANDLE (WINAPI *pOpenVxDHandle)(HANDLE)=0; *pr3Evt = CreateEvent(0, bManualReset, bInitialState, NULL); if (pOpenVxDHandle == 0) pOpenVxDHandle = GetAddressOfOpenVxDHandle(); if (pOpenVxDHandle && *pr3Evt) *pr0Evt = pOpenVxDHandle(*pr3Evt); else *pr0Evt = 0; return ( (*pr3Evt != 0) && (*pr0Evt != 0) ); } 使用时:CreateCommonEvent(&hEvent2R3, &hEvent2R0, TRUE, FALSE) 在发给驱动: inBuf[0] = hEventR0; inBuf[1] = hEvent2R0; DeviceIoControl(hVxd,GETEVENT,inBuf,2*sizeof(PVOID),NULL,0,&cbBytesReturned, NULL) 应用用WaitForSingleObject和ResetEvent等;驱动用VWIN32_SetWin32Event等,二者相互通信。当然在ISR中加上GlobalEvent。 请问应该如何在RING0和RING3地址之间转换呢 ---------------------------------------------------------------------- 转换什么地址? | |
| 7楼#发布于:2002-06-19 20:42 
					请问应该如何在RING0和RING3地址之间转换呢?				 | |
| 8楼#发布于:2002-06-19 18:37 
					楼上说的,对。				 | |
| 9楼#发布于:2002-06-19 15:28 
					要使用win32事件编程,你需要先创建一个事件和一个县城,在将ring3级事件句柄转化为ring0级句柄,传给vxd,用这个线程等待vxd发送的事件消息。这样就ok了。
 答的好,给兄弟点分吧!! ;) | |
| 
 | 
| 10楼#发布于:2002-06-19 15:18 
					楼上说的有...一定道理。
 :D | |
| 
 | 
| 11楼#发布于:2002-06-18 20:16 
					可以自己试一试将中断靠近几毫秒,区别就有了。				 | |
| 12楼#发布于:2002-06-17 14:42 
					可我在HELP中没有看到关于这方面的内容?				 | |
| 
 | 
| 13楼#发布于:2002-06-16 16:34 
					建议你使用win32事件,它的效率确实比较高				 | |
| 14楼#发布于:2002-06-15 14:02 
					当然可以的。				 | |
 
							
 
				 
				 
				
 
				