• 驱动加载INF文件解析(二)


    INF文件应用示例
    一、修改telnet服务,端口改为99,NTLM认证方式为1。 
    =============================== 


    C:\myinf\Telnet.inf 

    [ Version ] 
    Signature = " $WINDOWS NT$ " 
    [ DefaultInstall ] 
    AddReg = AddRegName 
    [ My_AddReg_Name ] 
    HKLM , SOFTWARE\Microsoft\TelnetServer\ 1.0 , TelnetPort , 0x00010001 , 99 
    HKLM , SOFTWARE\Microsoft\TelnetServer\ 1.0 , NTLM , 0x00010001 , 1 

    安装:rundll32.exe setupapi , InstallHinfSection DefaultInstall 128 c:\myinf\telnet.inf 

    说明: [ Version ] 和 [ DefaultInstall ] 是必须的,0x00010001表示REG_DWORD数据类型,0x00000000或省略该项(保留逗号)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。 
    InstallHinfSection是大小写敏感的。它和setupapi之间只有一个逗号,没有空格。128表示给定路径,该参数其他取值及含义参见MSDN。 
    特别注意,最后一个参数,必须是inf文件的全路径,不要用相对路径。 
    inf文件中的项目都是大小写不敏感的。 

    二、服务 
    =============== 

    增加一个服务: 

    [ Version ] 
    Signature = " $WINDOWS NT$ " 
    [ DefaultInstall.Services ] 
    AddService = inetsvr ,, My_AddService_Name 
    [ My_AddService_Name ] 
    DisplayName = Windows Internet Service 
    Description = 提供对 Internet 信息服务管理的支持。 
    ServiceType = 0x10 
    StartType = 2 
    ErrorControl = 0 
    ServiceBinary = % 11 %\inetsvr.exe 

    保存为inetsvr.inf,然后: 

    rundll32.exe setupapi , InstallHinfSection DefaultInstall 128 c:\path\inetsvr.inf 

    这个例子增加一个名为inetsvr的服务(是不是很像系统自带的服务,呵呵)。 

    几点说明: 
    1 ,最后四项分别是 
    服务类型:0x10为独立进程服务,0x20为共享进程服务(比如svchost); 
    启动类型: 0 系统引导时加载, 1 OS初始化时加载, 2 由SCM(服务控制管理器)自动启动, 3 手动启动, 4 禁用。 
    (注意,0和1只能用于驱动程序) 
    错误控制: 0 忽略, 1 继续并警告, 2 切换到LastKnownGood的设置, 3 蓝屏。 
    服务程序位置:% 11 %表示system32目录,% 10 %表示系统目录(WINNT或Windows),% 12 %为驱动目录system32\drivers。其他取值参见DDK。你也可以不用变量,直接使用全路径。 
    这四项是必须要有的。 
    2 ,除例子中的六个项目,还有LoadOrderGroup、Dependencies等。不常用所以不介绍了。 
    3 ,inetsvr后面有两个逗号,因为中间省略了一个不常用的参数flags。 

    删除一个服务: 

    [ Version ] 
    Signature = " $WINDOWS NT$ " 
    [ DefaultInstall.Services ] 
    DelService = inetsvr 

    很简单,不是吗? 

    当然,你也可以通过导入注册表达到目的。但inf自有其优势。 
    1 ,导出一个系统自带服务的注册表项,你会发现其执行路径是这样的: 
    " ImagePath " = hex( 2 ): 25 , 00 , 53 , 00 , 79 , 00 , 73 , 00 , 74 , 00 , 65 , 00 , 6d , 00 , 52 , 00 , 6f , 00 , 6f , 00 , \ 
    74 , 00 , 25 , 00 , 5c , 00 , 73 , 00 , 79 , 00 , 73 , 00 , 74 , 00 , 65 , 00 , 6d , 00 , 33 , 00 , 32 , 00 , 5c , 00 , 74 , \ 
    00 , 6c , 00 , 6e , 00 , 74 , 00 , 73 , 00 , 76 , 00 , 72 , 00 , 2e , 00 , 65 , 00 , 78 , 00 , 65 , 00 , 00 , 00 
    可读性太差。其实它就是%SystemRoot%\system32\tlntsvr.exe,但数据类型是REG_EXPAND_SZ。当手动导入注册表以增加服务时,这样定义ImagePath显然很不方便。如果用REG_SZ代替会有些问题——不能用环境变量了。即只能使用完整路径。用inf文件完全没有这个问题,ServiceBinary(即ImagePath)自动成为REG_EXPAND_SZ。 
    2 ,最关键的是,和用SC等工具一样,inf文件的效果是即时起效的,而导入reg后必须重启才有效。 
    3 ,inf文件会自动为服务的注册表项添加一个Security子键,使它看起来更像系统自带的服务。 

    另外,AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。
    ____________________________

      INF文件精彩实例

      光说不练不行,下面让我们来看几个INF文件的典型应用。

      1.打开“锁”定的注册表

      第一步:打开记事本程序,输入以下内容:

      [version]

      signature=”$chicago$”

      [defaultinstall]

      delReg=DeleteMe

      [DeleteMe]

      HKCU,“Software\Microsoft\Windows\CurrentVersion\Policies\System”,“DisableregstryTools”

      HKLM,“Software\Microsoft\Windows\CurrentVersion\Policies\System”,“DisableregstryTools”

      输入完毕,另存为UNLOCK.INF,名字任取,扩展名必须是INF。 
      第二步:在“UNLOCK.INF”文件上右键单击,在弹出的右键菜单中点选“安装”,如图2所示,被锁的注册表即会应声而开。

      


      2.巧妙利用INF文件自动备份重要的文件

      大家都知道,注册表是Windows操作系统的命根子,因此,系统启动时会自动运行注册表检查程序,自动更新备份注册表文件。在系统盘的Windows目录中有一个“Scanreg.ini”,Scanregw.exe每天所执行的默认操作都是在它的控制下运行的,我们可以利用这一原理实现对我们重要文件的备份。

      第一步:打开资源管理器,找到该文件,用记事本程序打开它。我们可以清楚地看到共有五个参数,如图所示。

      (1)Backup 这个参数值可为0或1,默认为1。值为1表示在每天首次启动时扫描注册表,值为0表示不进行任何注册表操作。

      (2)Optimize 这个参数值可为0或1,默认为1。值为1表示每次扫描注册表时删除注册表中的多余数据,从而优化注册表数据,值为0表示不进行删除操作。

      (3)ScanregVersion=0.0001 程序版本说明。

      (4)MaxBackupCopies 这个参数用来设置建立的备份文件的个数,值为5至99中的任一个数,默认值为5,即最大可建立五个备份文件,为更好的保护系统,一般来说设置10个左右为宜。

      (5)BackupDirectory 这个参数用来设置备份文件存放的目录,默认存放目录为Windows\Sysbckup,注意这里填写的必须是完整路径。

      (6)Files 在“Scanreg.ini”的最后有如下注释内容“;Files=[dir code,]file1,file2,file3”,将其前面的注释符号“;”去掉,你就可以自己DIY需要注册表检查程序备份的重要文件了。默认情况下,注册表检查程序创建注册表备份文件时,会将“system.dat”、“system.ini”、“user.dat”和“win.ini”四个文件保存在“cab”压缩文件中,如果你需要将其他重要的系统配置文件添加到此压缩文件中,可在“Files=”后面输入“[目录代码],文件名1,文件名2,文件名3”,文件名之间以逗号相隔,目录代码含义如下:

      10 代表C:\Windows目录

      11 代表C:\Windows\System目录

      30 代表C盘根目录

      31 代表Windows系统所在盘的根目录

      例如要把Autoexec.bat和Config.sys两个文件放到备份文件中,可设置参数为“File=30,config.sys,autoexec.bat”。 
     

  • 相关阅读:
    JS 实现的年月日三级联动
    【代码总结● Swing中的一些操作与设置】
    S7通信协议之你不知道的事儿
    .NetCore程序在Linux上面部署的实现
    什么是哈希表?
    什么是队列?
    什么是栈?
    什么是数组?
    什么是数据结构?
    什么是链表?
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100409.html
Copyright © 2020-2023  润新知