阅读:1379回复:14
vtoolsd中的异步事件类能否设置事件触发w32的线程?
同
|
|
|
沙发#
发布于:2002-06-15 14:02
当然可以的。
|
|
板凳#
发布于:2002-06-16 16:34
建议你使用win32事件,它的效率确实比较高
|
|
地板#
发布于:2002-06-17 14:42
可我在HELP中没有看到关于这方面的内容?
|
|
|
地下室#
发布于:2002-06-18 20:16
可以自己试一试将中断靠近几毫秒,区别就有了。
|
|
5楼#
发布于:2002-06-19 15:18
楼上说的有...一定道理。
:D |
|
|
6楼#
发布于:2002-06-19 15:28
要使用win32事件编程,你需要先创建一个事件和一个县城,在将ring3级事件句柄转化为ring0级句柄,传给vxd,用这个线程等待vxd发送的事件消息。这样就ok了。
答的好,给兄弟点分吧!! ;) |
|
|
7楼#
发布于:2002-06-19 18:37
楼上说的,对。
|
|
8楼#
发布于:2002-06-19 20:42
请问应该如何在RING0和RING3地址之间转换呢?
|
|
9楼#
发布于: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地址之间转换呢 ---------------------------------------------------------------------- 转换什么地址? |
|
10楼#
发布于:2002-06-20 08:57
要使用win32事件编程,你需要先创建一个事件和一个县城,在将ring3级事件句柄转化为ring0级句柄,传给vxd,用这个线程等待vxd发送的事件消息。这样就ok了。
-------------------------------------------- 就是将ring3中创建的句柄转化为在ring0级vxd中能够使用的句柄。 |
|
11楼#
发布于:2002-06-20 09:12
真细心呀。
|
|
12楼#
发布于:2002-06-20 09:59
就是将ring3中创建的句柄转化为在ring0级vxd中能够使用的句柄。
----------------------------------------------------------------------- \"OpenVxDHandle\",即 pOpenVxDHandle = GetAddressOfOpenVxDHandle(); if (pOpenVxDHandle && *pr3Evt) *pr0Evt = pOpenVxDHandle(*pr3Evt); |
|
13楼#
发布于:2002-06-20 14:59
谢谢,我懂了!
|
|
14楼#
发布于:2002-06-22 12:03
我意思是能否用vtoolsd中的自己带的类来做ring0 到ring3的转换?
|
|
|