阅读:993回复:5
关于直接方式的异步写问题
我是用DS写的NT式的ISA驱动,应用程序发DEVICEIOCTL直接写端口,采用METHOD_OUT_DIRECT的异步写方式,应用中申请的缓冲区是90K,在我的电脑上(配置P4 2.4 G,512M内存,80G硬盘)上成功地实现了驱动和应用的通信,现在在工控机上联调(配置P1,128M内存,20G笔记本硬盘),可是应用调用驱动时间不是很长就死机了,从启后显示,驱动不能加载上,错误代码是0xC0000221, 我去系统目录下的WINNT/SYSTEM32/DRIVERS/目录下看,显示,文件的格式不对,要我插入WIN2000安装光盘,从新安装,而且我驱动的。SYS文件也不见了,说明驱动文件被软坏了,我试着重新把好的。SYS文件拷贝到WINNT/SYSTEM32/DRIVERS下,可是一粘贴就死机,是什么原因啊 ????
难道METHOD_OUT_DIRECT对缓冲区的大小有限制?? 还是由于异步的原因??可是我在自己的电脑上能成功运行啊! |
|
|
沙发#
发布于:2003-08-04 16:24
怎么没人回答啊,其实我想问的是应用程序采用METHOD_IN_DIRECT(从板子读数据)方式和驱动通信,在应用层分配缓冲区的大小有没有限制,我申请100K的算大吗??
还有一个问题 ,我的驱动中对MDL的操作,释放MDL是我做,还是系统来做?? |
|
|
板凳#
发布于:2003-08-04 16:29
说说你用METHOD_OUT_DIRECT的理由
:D 100k小case :D mdl谁分配的谁释放 :D |
|
|
地板#
发布于:2003-08-04 16:58
说说你用METHOD_OUT_DIRECT的理由 谢谢你的回答,我第一次说错了,应该是METHOD_IN_DIRECT,因为我是从主板传数据给ISA板。DEVICEIOCTL里的两个缓冲区,输入缓冲区用来存放我要发给ISA的数据的字节数(每次传送的不一样),输出缓冲区存放要给ISA板的数据。IRP的排队方式是系统排队,我觉得这样做没什么问题啊! |
|
|
地下室#
发布于:2003-08-04 17:25
想法没错
做法不一定,好好check :D |
|
|
5楼#
发布于:2003-08-04 20:48
想法没错 我就是这么做的,怎么检查呢?? |
|
|