用C#设计一个驱动备份的程序代码

首先,从注册表获取驱动信息:
在 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, nullnull, 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);


有了这些基础,可以编写程序了,具体的也不细说,下载源码吧;
不过先声明,代码很烂,想到什么写什么,其他无关的就不提了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值