zoukankan      html  css  js  c++  java
  • 用C#设计一个驱动备份的程序代码

    用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);

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

    这里可以预览一下程序界面:

    2005-05-09 11:55 作者: 萧寒

  • 相关阅读:
    Excel 用row()函数 在Excel中自动添加序号,
    sql server数据导入
    Excel导入sq server后数据列以科学计数法显示
    left join 和 left outer join 的区别
    多点求值与暴力插值
    生成函数

    洲阁筛 学习笔记
    「NOI2017」游戏 解题报告
    CF 1045 H. Self-exploration 解题报告
  • 原文地址:https://www.cnblogs.com/oop/p/151808.html
Copyright © 2011-2022 走看看