阅读:1396回复:3
内存区中截获的字符串数据如何正确显示到上层程序?
在底层驱动截获的包数据放在开辟的内存区里,用SoftIce跟踪数据包内容都是正确的,但是用上层程序来取这些数据,发现有些字符串数据不能完全显示,有几个字符串的最后的字符不能显示出来。但只是偶尔现象,不是每次都有。不知道这是什么原因,是不是需要用UniCode来处理这些字符串操作?
|
|
最新喜欢:xiangs... |
沙发#
发布于:2002-10-18 09:18
你是用什么方式把这段内存传到应用层的?应用层又是通过什么方式获得这块内存指针的?
推荐的方法是应用程序调用API DeviceIoControl函数,并赋lpOutputBuffer, 和 dwOutputBufferLen以正确的值。如果是用这种方法, 要保证输入缓冲足够大,并设置输出缓冲长度正确的值;在驱动中,IRP_MJ_DEVICE_CONTROL的处理中,把内核内存中的字符串拷贝到IRP的字段(依赖于IO Control Code 的定义中的内存I/O 方式 ),并一定要设置正确输出长度(oStatus->Information = 长度,如果这个长度小于字符串实际长度,就会产生切断现象;)。 如果不是用这种方式,你又是用什么方式输出到应用层?ReadFile的方式和上述的方式差不多。 祝你好运。 |
|
|
板凳#
发布于:2002-10-23 17:29
呵呵,很简单的处理办法:在驱动中不要将内容放到systembuffer中,而是放到UserBuffer中,那么就不用设置那个information了。我反正这样是可以的
|
|
地板#
发布于:2002-10-26 20:48
如果不能保证驱程是最上面一层,好像会有问题吧,
另外,是不是可以在没有irp包驱动时,直接通过中断,将网卡端口到达的数据缓冲到驱程自己分配的内存中, :P |
|
|