mejycrack
驱动牛犊
驱动牛犊
  • 注册日期2004-11-20
  • 最后登录2012-07-02
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1226回复:0

问个驱动和应用程序通讯的问题

楼主#
更多 发布于:2005-05-19 12:18
我做了一个NDIS HOOK的驱动,和一个输出TCP连接的应用程序,我采用事件作为通讯的方式。
现在的问题是:
我在应用程序中输出的连接数量要小于驱动中采用dbgprint输出的连接数量。我初步怀疑当驱动激活应用程序后,应用程序处理去了,但是这时驱动中又有下一个数据包但是还没来得及同步,所以就直接通过了。一句话就是驱动和应用程序没有完全同步。
我应该怎么做,等到驱动激活应用程序时处于挂起状态,直到应用程序处理完毕在往下走呢?
我得代码在下面
应用层:
while (1) {
WaitForSingleObject(pThis->m_hEvent,INFINITE);
i++;
pIp = (PIPHEADER)pThis->m_pShareMemory;
sprintf(srcip,\"%03d.%03d.%03d.%03d\",pIp->SourceIp[0],
pIp->SourceIp[1],
pIp->SourceIp[2],
pIp->SourceIp[3]);
sprintf(destip,\"%03d.%03d.%03d.%03d\",pIp->DestinationIp[0],
pIp->DestinationIp[1],
pIp->DestinationIp[2],
pIp->DestinationIp[3]);
sprintf(nuo,\"%d\",i);
pThis->AddRow(srcip,nuo,destip,\"1\");
//设置事件对象为无信号状态
DeviceIoControl(pThis->m_hDevice,
IO_CLEAR_EVENT,
NULL,
0,
NULL,
0,
&dwReturn,
NULL
);
}

驱动层
__try{
__try{
if (IS_APP_MONITOR ==1 ) {  //如果监控但是有信号
while (gxEvent==NULL) ;

memset(m_systemAddress,0,sizeof(IPHEADER));
memcpy(m_systemAddress,(char *)pIpHeader,sizeof(IPHEADER));
KeSetEvent(gxEvent,0,FALSE);
}

}
except(EXCEPTION_EXECUTE_HANDLER){
DbgPrint(\"Have Exception\\n\");
}
}
finally{};
游客

返回顶部