wwhung
驱动牛犊
驱动牛犊
  • 注册日期2002-07-10
  • 最后登录2003-05-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1396回复:3

内存区中截获的字符串数据如何正确显示到上层程序?

楼主#
更多 发布于:2002-10-18 09:03
在底层驱动截获的包数据放在开辟的内存区里,用SoftIce跟踪数据包内容都是正确的,但是用上层程序来取这些数据,发现有些字符串数据不能完全显示,有几个字符串的最后的字符不能显示出来。但只是偶尔现象,不是每次都有。不知道这是什么原因,是不是需要用UniCode来处理这些字符串操作?

最新喜欢:

xiangshifuxiangs...
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-18 09:18
你是用什么方式把这段内存传到应用层的?应用层又是通过什么方式获得这块内存指针的?
推荐的方法是应用程序调用API DeviceIoControl函数,并赋lpOutputBuffer, 和 dwOutputBufferLen以正确的值。如果是用这种方法, 要保证输入缓冲足够大,并设置输出缓冲长度正确的值;在驱动中,IRP_MJ_DEVICE_CONTROL的处理中,把内核内存中的字符串拷贝到IRP的字段(依赖于IO Control Code 的定义中的内存I/O 方式 ),并一定要设置正确输出长度(oStatus->Information = 长度,如果这个长度小于字符串实际长度,就会产生切断现象;)。

如果不是用这种方式,你又是用什么方式输出到应用层?ReadFile的方式和上述的方式差不多。
祝你好运。
Tom_lyd
njtlxm
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望28点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-10-23 17:29
呵呵,很简单的处理办法:在驱动中不要将内容放到systembuffer中,而是放到UserBuffer中,那么就不用设置那个information了。我反正这样是可以的
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-26 20:48
如果不能保证驱程是最上面一层,好像会有问题吧,

另外,是不是可以在没有irp包驱动时,直接通过中断,将网卡端口到达的数据缓冲到驱程自己分配的内存中, :P
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
游客

返回顶部