首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

驱动的注册表信息中 Flags 是什么意思解决方案

2012-04-05 
驱动的注册表信息中 Flags 是什么意思例如有下面的一段注册表信息:[HKEY_LOCAL_MACHINE\Drivers\Registere

驱动的注册表信息中 Flags 是什么意思
例如有下面的一段注册表信息:
[HKEY_LOCAL_MACHINE\Drivers\RegisteredDevice\BTD_BTD0]
  "Dll"="btd.dll"
  "Prefix"="BTD"
  "Index"=dword:0
  "Flags"=dword:0
请问这里的“Flags”是什么意思?还有这里怎么没有“Order”这一项值呢?和流驱动的注册表信息不太一样,我看到好几个地方都是用到了这个“btd.dll”,这个“btd.dll”是干什么的呢,
其它使用到这个DLL的地方:
[HKEY_LOCAL_MACHINE\Drivers\RegisteredDevice\BTD_COM]
  "Dll"="btd.dll"
  "Prefix"="COM"
  "Flags"=dword:0

[HKEY_LOCAL_MACHINE\Drivers\RegisteredDevice\BTD_BSP]
  "Dll"="btd.dll"
  "Prefix"="BSP"
  "Flags"=dword:0
还有下面这一段信息:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Bluetooth\Driver]
  "Dll"="btd.dll"
  "Prefix"="BTD"
  "Index"=dword:0
  "Flags"=dword:2 ; Use LoadLibrary
这里是不是又在加载名字为BTD0的驱动呢?这个BTD0被加载2次不会有问题么?

[解决办法]
COPY了一段。呵呵
[FLAGS:驱动加载配置]

注册表里每个驱动可以包含一个键FLAGS, 这个配置决定了驱动的加载.下面是WinCE5.0的FLAGS的可选配置,(可以多项相与得到复合值)说明如下:
DEVFLAGS_NONE
注册表没有指定FLAGS
DEVFLAGS_UNLOAD
指示设备管理器执行完Init后卸掉驱动,并且返回成功.总线枚举驱动都这么干.
DEVFLAGS_LOADLIBRARY
通知设备管理器使用LoadLibrary代替LoadDriver.2者的区别:LoadLibrary加载的可以paged out.
DEVFLAGS_NOLOAD
指示设备管理器,驱动将不会被加载.
DEVFLAGS_NAKEDENTRIES
指示设备管理器前缀不要用.可以用前缀来active,但找函数入口点时候不要用前缀. 比如电池驱动指定这个标记后,设备管理器会用BAT这个前缀去实现驱动,但在调用接口时候不会默认的用BAT_Init,.BAT_***,而是自己去找入口点. 这样的目的是可以自由修改驱动接口函数名,可以不要和前缀相同了.
DEVFLAGS_BOOTPHASE_1
要求加载驱动时候,必须BootPhase大于1. BootPhase就是启动阶段的意思. 设备管理器启动是分阶段的.BootPhase1在找注册表.;BootPhase2 加载驱动;BootPhase3开始运行.(题外话,也可以只分2个阶段.)
DEVFLAGS_IRQ_EXCLUSIVE
在访问IRQ时候再加载.
WinCE6.0在此的基础上增加了几个
DEVFLAGS_LOAD_AS_USERPROC
这个是重头戏, 指示设备管理器,把驱动给加载到user mode. 设备管理器会创建一个Reflector.这个就是WinCE6.0主要的改进了.现在我也不懂, 后面再说说这个.
DEVFLAGS_NOUNLOAD
阻止驱动被卸载.
DEVFLAGS_TRUSTEDCALLRERONLY
指示设备管理器限制驱动只能被信任的应用程序open. 在WinCE5.0的文档里面也说有这个,但代码中没有发现,所以5.0应该是没有实现.(时空错乱?还是文档设计先行?还是ms藏私货了,反正我的版本没有.)
[解决办法]
请问这里的“Flags”是什么意思?还有这里怎么没有“Order”这一项值呢?和流驱动的注册表信息不太一样,我看到好几个地方都是用到了这个“btd.dll”,这个“btd.dll”是干什么的呢,

如果没有“order”这一项,就默认为"Order"=dword:0,btd.dll这个驱动应该是用于串口控制蓝牙设备的驱动。
[解决办法]
“这里是不是又在加载名字为BTD0的驱动呢?这个BTD0被加载2次不会有问题么?”
楼主,设备管理器是根据
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]注册表键的各子键来加载驱动的,你提供的这些注册表信息不是表示你的BTD0被加载2次。
[解决办法]
Flags是写这个注册表的人定义的一个标志,肯定用于btd.dll读注册表用的

btd.dll是可以加载多次的,我试过同一个DLL加载三次的情况,都很好。不过注册表里面肯定有对应的标志来区分,如果你上面注册表信息是完整的话,那么Prefix应该就是他们的区分标志。而同一个BTD,Flags又不一样,所以应该很好区分。

热点排行