w00d
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1218回复:1

OVERLAPPED变量能用多次吗???

楼主#
更多 发布于:2001-12-25 11:59
我用OVERLAPPED变量使得我的线程能与VxD程序进行异步数据交换,第一个线程工作的很好,可是第二个线程一运行就死机。我的程序如下:
1。页锁定部分
case DIOC_EVENTTHREAD:
if (!pDIOCParams->dioc_ovrlp) break;
TemOverLap= (PCHAR)LinPageLock( PAGENUM(pDIOCParams->dioc_ovrlp),
_NPAGES_(pDIOCParams->dioc_ovrlp, sizeof(OVERLAPPED)),
PAGEMAPGLOBAL);
EOverLap=(OVERLAPPED *) (TemOverLap+((ULONG)pDIOCParams->dioc_ovrlp  & 0xfff));
break;
2。通知应用程序,并释放页锁定部分
VWIN32_DIOCCompletionRoutine(EOverLap->O_Internal);
LinPageUnLock(PAGENUM(EOverLap),_NPAGES_(EOverLap, sizeof(OVERLAPPED)),PAGEMAPGLOBAL);

3。应用程序部分
DeviceIoControl(hPort,DIOC_EVENTTHREAD,NULL,0,NULL,0,NULL,&EOverLap);
        GetOverlappedResult(hPort,&EOverLap,&Event,TRUE);
4。宏定义
#define PAGENUM(p) (((ULONG(p))>>12)
#define _NPAGES_(p,k) ((PAGENUM((char*)p+(k-1))-PAGENUM(p))+1)
请问各位高手,我这样做有什么错误吗?谢谢了!

[编辑 -  12/25/01 作者: w00d]
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-28 10:17
大致看起来没有什么错误,和vtoolsd的sample一样。但有一点要提醒你:最好在每个线程里面“各自“打开/关闭vxd,否则会翘掉。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部