【高手】过来拿分!!!!

terroy 2004-09-15 04:11:54
最近看到WALTER ONEY的一篇Filtering Serial Port Modem Status的文章,文章中讲了关于解决两个应用程序同时操作对串口的共享冲突问题。
其中提到了一个EDO(external device object)的概念,大概的方法是在serial.sys的UpFilter.sys中建立两个DO,一个是常规的FIDO,一个就是EDO,众所周知,FIDO是没有自己的设备名的,而在这里替EDO设一个符号连接名,这样应用程序就可以访问EDO了,也就达到了共享串口的目的了。文章没有讲EDO的具体实现方法,呵呵,想听一下大家的看法。
先说一下自己的想法:
我认为EDO和FIDO在UpFilter中是共享一个设备扩展区(device_extension)的,因为他们处理IRP的方向都是下层的SERIAL
,我想在扩展区中加入虚拟的EDO的各种数据结构,并先创建常规的FIDO:deviceobject :IoCreateDevice(DriverObject,sizeof
(DEVICE_EXTENSION),
NULL, // No Name for fido
deviceType,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&deviceObject);
随后再创建EDO:ExdeviceObject :
IoCreateDevice (DriverObject,
0, //don't allocate memory for Edo's extension
NULL, // here name the external device object
deviceType,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&ExdeviceObject);
然后再:ExdeviceObject->DeviceExtension = deviceObject->DeviceExtension;
这样EDO和FIDO就有了相同的扩展。
还有特殊的IRP的处理,比如REMOVE设备,要怎样区分是针对EDO的还是针对下层的FDO的?又比如REMOVE了下层的FDO了那么EDO就不存在了,要做特殊处理吗?

请大家讨论讨论
...全文
71 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧