S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

文件过滤驱动笔记

Posted on 2008-12-27 11:11 S.l.e!ep.¢% 阅读(550) 评论(0)  编辑 收藏 引用 所属分类: Windows WDM

    
     在安装文件过滤驱动时,如果指定[DefaultInstall.NT]节的CopyFiles = @DriverFile.sys字段将会导致系统拷贝驱动文件DriverFile.sys到inf文件中在所指定的目录,由[DestinationDirs]的DefaultDestDir 字段指定,如DefaultDestDir = 11。

     其中10标识Windows目录,11标识Windows\system32目录,12标识Windows\system32\drivers目录。
     也可以不指定拷贝驱动文件,将inf和sys文件放在其他目录,但inf里面指定的目录必须和sys具体的位置保持一致,否则会由于找不到文件而安装失败。(据我观察,会生成一个DriverFile.PNF文件,暂时不清楚该文件的作用)。

     在打包安装程序中调用rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 <路径>\<DriverFile.inf>安装后,如果驱动注册了服务,会在注册表的如下位置:HKLM\SYSTEM\CurrentControlSet\Services\your server\ImagePath看到驱动文件所在的目录。

    安装驱动后(重启前),如果直接手动删除驱动文件注册表项:HKLM\SYSTEM\CurrentControlSet\Control\Class\your device guid键及其所有的子键(your device guid,由用户随机生成,并在inf文件中直接给指定,如:ClassGUID = {8EC0055D-048F-81D1-B537-0000F8753ED1})和驱动注册的服务注册表项(该驱动开启注册的服务),重启后会导致BSOD(蓝屏),直接删除DriverFile.sys文件,可以使驱动无效,但是不是正确的卸载方法,暂时没有找到很好的“程序卸载驱动”的方法。

驱动安装成功的inf 代码如下:

/******************************************************************************
*
*                        .inf       U盘文件过滤驱动
*
******************************************************************************/

; USBMon.inf
;
; Installation inf for the Disk Performance Monitor Filter driver [ DDK Sample ]
;
; Copyright (c) Microsoft Corporation
;

[Version]
Signature = "$Windows NT$"
Class     = LegacyDriver
ClassGUID = {8EC0055D-048F-81D1-B537-0000F8753ED1}

[DefaultInstall.NT]
;CopyFiles = @USBMon.sys
Addreg    = USBMon.AddReg

[DestinationDirs]
DefaultDestDir = 11

[USBMon.AddReg]
HKLM, System\CurrentControlSet\Control\Class\{8EC0055D-048F-81D1-B537-0000F8753ED1}, UpperFilters, 0x00010008, USBMon


;
; Service installation section
;

[DefaultInstall.NT.Services]
AddService = USBMon, , USBMon.Service.Install

[USBMon.Service.Install]
DisplayName    = %service_desc%
ServiceType    = 1
StartType      = 2
ErrorControl   = 1
ServiceBinary  = %11%\USBMon.sys
LoadOrderGroup = "PnP USBMon"

[SourceDisksFiles]
USBMon.sys=1

; WinXP and later

[SourceDisksNames]
1 = %diskid1%,,,\


[SourceDisksNames.x86]
1 = %diskid1%,,,\

[SourceDisksNames.ia64]
1 = %diskid1%,,,\

[SourceDisksNames.amd64]
1 = %diskid1%,,,\

;
; Localizable Strings
;

[Strings]

msft         = "Microsoft Corporation"
service_desc = "Disk Performance Monitor Filter Driver"
diskid1      = "Microsoft Corp. Installation Disk #1 (USBMon)"


/**************************************************************
*
*                           The   Inf     Code    End 
*
***************************************************************/


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理