获取WinCE已加载驱动的信息

//=====================================================================
//TITLE:
//    获取WinCE已加载驱动的信息
//AUTHOR:
//    norains
//DATE:
//    Monday 22- February-2010
//Environment:
//     WINDOWS CE 5.0
//=====================================================================

 

     众所周知,WinCE下的驱动,只要不是通过RegisterDevice进行加载,那么我们都能够在注册表找到蛛丝马迹。说明白点,我们只要搜寻HKEY_LOCAL_MACHINE/Driver/Active/下的键值,就知道哪些驱动已经被成功加载,然后再根据其已加载信息,我们就能在BuiltIn获取更多。

 

  所以,本文的立足点,就在于注册表。为了简化操作,关于注册表的操作,我会使用一个CReg类,该类的完全代码可以在此找到:(http://blog.csdn.net/norains/archive/2007/06/20/1659925.aspx
  
  在开始讲述之前,我们先来约定一些数值。因为驱动各有不同,所以所需要的参数是不一致的。但有一些数值,却是必备的:驱动名,驱动前缀,驱动序号,驱动的文件。所以这四个形参我们单独列出来,至于其它的数值,我们之前用map对应即可。因此,我先声明如下一个结构体:  

  
  我们获取已加载驱动的函数定义如下:  

  
  当函数执行失败,直接返回FALSE;如果执行成功,那么会返回TRUE,并且将信息存储到vtDeviceInfo中。pCallbackFunc是回调函数,每找到一个驱动信息就会调用该函数。如果该函数返回为TRUE,则继续搜索;反之,则停止。如果不使用回调函数,那么直接设置为NULL即可。
  
  关于该回调函数,定义如下:
  


  接下来,我们看看GetActive函数的实现部分:
  

  函数意思很明了,无非是枚举Active下的键值,然后将相关信息送到AnalyzeDeviceInfo中进行分析。
  
  AnalyzeDeviceInfo的实现如下:
  


  函数也没什么比较晦涩的地方,无非就是列举注册表的数值。不过,这里稍微有点不同,但为KEY值时,我们会将注册表的路径传递给AnalyzeBuiltInInfo函数对BuiltIn字段进行分析。如果是NAME值,那么我们直接忽略过去,因为该数值我们采用的是BuiltIn的子根值。
  
  那么接下来,我们就是看AnalyzeBuiltInInfo函数了:
  

  函数很简单,也只有DLL,Prefix和Index我们才进行分析,其它的就直接丢给AnalyzeExtendParam函数即可。
  
  这里还有一小点,就是ConvertToTSTRING函数的调用。因为对于Win32 API函数来说,返回的是一个VOID指针的缓冲区,如果想转换为UNICODE的字符串,那么我们需要将高位和低位互换。所以,这才有了ConvertToTSTRING函数:
  

  最后的最后,就是AnalyzeExtendParam函数,也就是最简单的函数了:  

  

posted @ 2010-02-22 15:41  我的一天  阅读(156)  评论(0编辑  收藏  举报