IoAttachDevice

Posted on 2005年6月17日 14:43
IoAttachDevice establishes layering between drivers so that the same 
IRPs can be sent to each driver in the chain.

This routine is used by intermediate drivers during initialization. 
It allows such a driver to attach its own device object to another 
device in such a way that any requests being made to the original 
device are given first to the intermediate driver.

The caller can be layered only at the

* top of an existing chain of layered drivers. *

IoAttachDevice searches for the highest device 
object layered over TargetDevice and attaches to * that * object 
(that can be the TargetDevice). 

? Therefore, this routine must not be called if a driver that must 
be higher-level has already layered itself over the target device. ?

...

This routine sets the AlignmentRequirement in SourceDevice to the 
value in the next-lower device object and sets the StackSize 
to the value in the next-lower object plus one.

*********************************************************************
Warning:  AttachedDevice must point to a global memory location, such
as the driver's device extension. IoAttachDevice opens the file 
object for the target device, updates AttachedDevice, performs the 
attach, and then closes the file object. Thus, 

! the source device receives the IRP_MJ_CLEANUP and IRP_MJ_CLOSE 
requests for the file object before IoAttachDevice returns.  !

The driver must forward these requests to the target device, and 
AttachedDevice must be a memory location accessible to the driver's
DispatchCleanup and DispatchClose routines.
*********************************************************************

Feedback

请发表评论
发表评论
标题
 
姓名
 
网址
验证码
 
评论  
 

Copyright twinsant.