首先,从注册表获取驱动信息: 
 在 Windows 选择运行,在运行命令行中键入“regedit”,打开注册表编辑器,然后找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\这个目录。在这一级目录下会有多个子目录,每个就是一个驱动,在DriverDesc中描述了驱动的名称,ProviderName中描述了驱动发布厂商信息,在InfPath中描述了inf目录下的信息文档名称,该文件是INI结构;在信息文件内SourceDisksFiles段描述了驱动程序的文件,分别会保存在System32 目录 windows主目录及相应的drivers help spool\drivers\color inf nview 子目录内;获得了这些信息就可以备份驱动了。 
那么用c#设计的话必须先解决读取ini文件的问题,虽然有现成的api GetPrivateProfileString WritePrivateProfileString; 
 设计得Ini文件读取类必须实现枚举段中得键值;因为象这样的ini内容就必须这样读取: 
 [SourceDisksFiles] 
 ialmnt5.sys  = 1 
 ialmsbw.sys = 1 
 ialmkchw.sys = 1 
因为sourcedisksfiles的内容是不确定的;那么实现一个这样的方法: 
   
//从Ini文件中,将指定的Section名称中的所有Ident添加到列表中 
     public void ReadSection(string Section, StringCollection Idents) { 
       Byte[] Buffer=new Byte[16384]; 
       //Idents.Clear(); 
  
       int bufLen=GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0), 
         FileName); 
       //对Section进行解析 
       GetStringsFromBuffer(Buffer, bufLen, Idents); 
     }
 完整的IniFile类请阅读C#一个Ini操作类 
第二步就是访问注册表; 
 .net 提供了Registry类,访问键值的方法很简单但是很不方便; 
 所以增加一个扩展类,实现按路径访问,比如说要访问 
 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\ 
 下面的所有键名,可以这样写: 
 
/** <summary> 
     /// 载入系统设备主键名 
     /// </summary> 
     /// <returns>数组</returns> 
     public string[] LoadLocalMachineControlNames(){ 
       return Registry.LocalMachine.OpenSubKey("SYSTEM").OpenSubKey("CurrentControlSet").OpenSubKey("Control").OpenSubKey("Class").GetSubKeyNames(); 
     }
 但是是不是有点太不直观了; 
 那么增加一个方法: 
 
/** <summary> 
     /// 允许按层次展开节点 
     /// 如:\SYSTEM\CurrentControlSet\Control\Class\ 
     /// </summary> 
     /// <param name="Key">层次文本</param> 
     /// <returns>最末键</returns> 
     public RegistryKey OpenRegistryKey(string Key){ 
       string[] keys = Key.Split("\\".ToCharArray()); 
       RegistryKey rk = Registry.LocalMachine; 
       try{ 
         for(int i=0;i<keys.Length;i++){ 
           if(keys[i].Trim().Length>0) 
             rk = rk.OpenSubKey(keys[i]); 
         } 
         return rk; 
       }catch{ 
         return null; 
       } 
     } 通过传递一个字符串直接访问最末键,应用实例: 
         string driverKey = @"\SYSTEM\CurrentControlSet\Control\Class\" + s[i]; 
         RegistryKey rk = rh.OpenRegistryKey(driverKey); 
 有了这些基础,可以编写程序了,具体的也不细说,下载源码吧; 
 不过先声明,代码很烂,想到什么写什么,其他无关的就不提了。 
这里可以预览一下程序界面:

 
 
                     
            
        













 
                    

 
                 
                    