驱动小牛
|
阅读:1536回复:3
麻烦大大解释一句代码,不懂
一个USB驱动
这是在PNP例程中的case IRP_MN_STOP_DEVICE里面的一段代码,好像是停设备之前,要把电源的IRP包给Cancel掉 在POWER例程的 case PowerSystemWorking:中也调用了同一段代码 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// NTSTATUS result; DEVICE_EXTENSION extension;//////就是那个用户自定义的大结构体 PIRP irp; // irp =(PIRP) InterlockedExchange(&extension->var1400, 0);//////////???这句不明白, ////////////////是在这里面存Pending irp么?可以这样么? if ( irp ) { IoCancelIrp(irp);///cancel pending irp result = InterlockedExchange(&extension->var1408, 1); if ( result ) { PoStartNextPowerIrp(irp); irp->IoStatus.Information = 0; irp->IoStatus.Status = STATUS_CANCELLED; IoCompleteRequest(irp, 0); } } |
沙发#
发布于:2008-05-09 11:34
某个例程把 一个IRP保存在了 extension->var1400变量里面,InterlockedExchange函数把它取出来,并把extension->var1400设置为0. 保证了该 IRP只处理1次.
|
|
驱动小牛
|
板凳#
发布于:2008-05-09 11:43
非常感谢
|
地板#
发布于:2008-05-19 22:19
学习
|
|