阅读:1515回复:8
CE驱动中有IRP队列的概念吗?如何进行串行化处理?
我们知道在NT以及Win2000的驱动中都有IRP队列的概念,这个队列可以由系统来管理,也可以创建由驱动来维护的队列。通过这个队列,实现IRP请求的串行化处理。
但在CE的驱动中有IRP队列的概念吗?如何实现请求的串行化?希望各位高手给以解答,谢谢! |
|
|
论坛版主
|
沙发#
发布于:2004-11-26 13:07
ce虽然也采用设备分层,但没有采用irp的机制,mdd有互斥机制来控制设备的访问,我觉得串行化问题要看具体情况。比如在应用中你可以在打开设备的时候指定一次只能一个应用打开设备。
|
|
板凳#
发布于:2004-11-26 14:59
wxl_50685330大哥说的是有道理,但我觉得这样并不是很灵活。
另外,如果我写的是单片的驱动程序,这时没有mdd层,那么怎么来控制对设备的互斥访问?如果需要互斥访问的话,是不是一定要我自己来实现? |
|
|
论坛版主
|
地板#
发布于:2004-11-26 16:02
这个要看情况了,不知道你写的是什么驱动,有没有使用ms提供的中间层,有时候他会帮你做,如果确实没有就需要你自己做了,也不难,就用EnterCriticalSection就行了
|
|
地下室#
发布于:2004-11-30 16:33
wxl_50685330大哥说的没错,用EnterCriticalSection确实可以实现互斥访问。实际上正如大哥前面所说,串行可以在自己的应用中进行控制或限制。
我之所以问这个问题,是因为我想了解CE驱动与NT驱动的不同。在NT下,驱动可以把请求放在队列里面,然后逐个进行处理,但CE下好像没有采用这种机制,而是通过同步访问来实现的,可以这么理解吗? |
|
|
论坛版主
|
5楼#
发布于:2004-12-01 13:44
恩,nt里面的irp排队其实好多时候也不必要,它提供用户自己对irp排队的机制,是为了让应用程序并行度提高,也就是应用采用异步方式时可以有很高的响应速度。这种方式适合那种大量传数据而又不需要太多握手的情况,比如大数据流传送应用。如果不自己管理irp,简单在上层进行数据操作时序控制的话,也就没有必要让驱动可以一次接收很多irp了。所以这个只是同步实现的层次问题。
刚才那些机制的灵活性要付出增加体系层次和代码大小的代价,ce对这些要敏感些。ce驱动应该也可以和应用异步动作,但没有提供驱动和上层异步处理多个事件的结构,其实我觉得这些东西在mdd层是可以做的,如果自己重写mdd层应该可以增加这种特性。关键是mdd和os内核的结合部分文档好多可能没有。 说了那么多,说错了兄弟不要怪我哈:))) |
|
6楼#
发布于:2004-12-03 12:13
同意wxl_50685330大哥的看法。
|
|
|
论坛版主
|
7楼#
发布于:2004-12-03 13:17
:)
兄弟安装驱动的问题搞定了? 安装使用的是专门的工具还是自己写的安装代码? |
|
8楼#
发布于:2004-12-03 15:01
还没搞定啊,等搞定之后再和大家分享 ;)
|
|
|