阅读:1941回复:8
驱动与应用的通信问题
在做流驱动十时,如果在IST中已经将数据取得,能不能通过消息机制将消息发送给上层应用(EVC中开发的),然后再由应用程序调用XXX_READ将数据读入,而不是由应用程序通过查询方式读数。
我试了一下,发送的消息上层怎么也收不到。(消息是使用系统内部的,不是我定义的)。我是通过deviceiocontrol将窗口句柄传给驱动dll,在IST中调用postmessage,上层却收不到,使用群发也不行。 报告invalid handle. 请大虾帮忙。 [编辑 - 3/5/04 by maoyanIII] |
|
沙发#
发布于:2004-03-06 08:59
不要用消息,用回调函数吧。
|
|
板凳#
发布于:2004-03-31 00:37
Use event plus file mapping.
|
|
地板#
发布于:2004-03-31 06:58
aaab01 : 能给出一个回调函数的例子么? 驱动里面可以使用应用程序的内存,但是能调用应用程序的回调函数么?
|
|
|
地下室#
发布于:2004-03-31 06:58
ndisworker :
file mapping, 共享内存? |
|
|
5楼#
发布于:2004-04-06 14:06
我试了用回调函数,怎么会发生exception?是不是在PB下回调EVC中的函数不行?
|
|
6楼#
发布于:2004-04-06 14:07
file mapping,是什么意思?上面那位大虾给我们解释一下吧.
|
|
7楼#
发布于:2004-04-08 04:09
我试过了,用共享内存是可以的。
hNFileMap = CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 256, IPC_MEM_NAME); if (hNFileMap != NULL ) { //pBuffer = (TCHAR *)MapViewOfFile (hNFileMap, FILE_MAP_WRITE, 0, 0, 0); pBuffer = (TCHAR *)MapViewOfFile (hNFileMap, FILE_MAP_WRITE, 0, 0, 0); if(pBuffer==NULL) { MessageBox(NULL,L"Can not map driver buffer", L"Device Handle", MB_OK ); } return TRUE; } |
|
|
8楼#
发布于:2004-04-08 04:10
估计直接的回调函数是不能工作的,因为代码不在一个进程里面,回调函数必须使用mapprocesspoint才能访问应用程序自己的内存!
|
|
|