//拷贝标志位
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
下面都类同