当前位置: 代码迷 >> 驱动开发 >> 寒江独钓的一段代码不懂 求解释解决思路
  详细解决方案

寒江独钓的一段代码不懂 求解释解决思路

热度:120   发布时间:2016-04-28 10:05:40.0
寒江独钓的一段代码不懂 求解释
        //拷贝标志位
         if(OldDevice->Flags & DO_BUFFERED_IO){
                 (*NewDevice).Flags|=DO_BUFFERED_IO;
         }
         if(OldDevice->Flags & DO_DIRECT_IO){
                 (*NewDevice).Flags|=DO_DIRECT_IO;
         }
         if(OldDevice->Characteristics & FILE_DEVICE_SECURE_OPEN){
                 (*NewDevice).Flags|=FILE_DEVICE_SECURE_OPEN;
         }
         (*NewDevice).Flags|=DO_POWER_PAGABLE;
 
在创建设备对象后  拷贝标志位
 
OldDevice->Flags 是什么意思    &是位运算    DO_BUFFERED_IO是什么意思     OldDevice->Flags & DO_BUFFERED_IO是什么意思
 (*NewDevice).Flags|=DO_BUFFERED_IO是什么意思  下面依次是什么意思
 
我刚刚开始学习驱动  菜鸟一个   这些问题在大家的眼里可能都是小儿科的问题    希望有懂的人帮我讲解一下  感激不尽!
------解决思路----------------------
引用:
        //拷贝标志位
         if(OldDevice->Flags & DO_BUFFERED_IO){
                 (*NewDevice).Flags
------解决思路----------------------
=DO_BUFFERED_IO;
         }
         if(OldDevice->Flags & DO_DIRECT_IO){
                 (*NewDevice).Flags
------解决思路----------------------
=DO_DIRECT_IO;
         }
         if(OldDevice->Characteristics & FILE_DEVICE_SECURE_OPEN){
                 (*NewDevice).Flags
------解决思路----------------------
=FILE_DEVICE_SECURE_OPEN;
         }
         (*NewDevice).Flags
------解决思路----------------------
=DO_POWER_PAGABLE;
 
在创建设备对象后  拷贝标志位
 
OldDevice->Flags 是什么意思    &是位运算    DO_BUFFERED_IO是什么意思     OldDevice->Flags & DO_BUFFERED_IO是什么意思
 (*NewDevice).Flags
------解决思路----------------------
=DO_BUFFERED_IO是什么意思  下面依次是什么意思
 
我刚刚开始学习驱动  菜鸟一个   这些问题在大家的眼里可能都是小儿科的问题    希望有懂的人帮我讲解一下  感激不尽!

显然,OldDevice, NewDevice 都是某个结构struct的指针。这个结构中定义了Flags这个变量。-> 是通过指针访问结构中成员的操作符,而‘ .’是直接对对象访问结构中成员的操作符。所以对指针OldDevice要用->来找Flags,而 (*NewDevice)已经是对象本身了,所以用‘ .’
DO_BUFFERED_IO 应该是预定义的位标记(比如bit 0 定义成0x1,bit 7 定义成0x80)
OldDevice->Flags & DO_BUFFERED_IO 是用来判断DO_BUFFERED_IO 这个位在OldDevice的Flags中是不是1
(*NewDevice).Flags
------解决思路----------------------
=DO_BUFFERED_IO 相当于(*NewDevice).Flags = (*NewDevice).Flags 
------解决思路----------------------
 DO_BUFFERED_IO
也就是如果OldDevice中有某位,那么把NewDevice中相应位也置1
下面都类同
  相关解决方案