Windows驱动程序的安装(一)
来源:互联网 发布:建筑设计软件图片 编辑:程序博客网 时间:2024/06/06 02:45
Windows的驱动程序安装,也就是将已经编译好的**.sys文件“嵌入”到Windows操作系统的内核层。以下介绍几种我所知道的常见方法。
注意:以下几种方法中,除inf安装外,适合一般的NT驱动,并不能安装Minifilter(微过滤驱动)。对于Minifilter的安装,我们将在以后的文章中谈到。
一、借助相关工具
网上有很多牛人写的工具,对**.sys文件的安装很管用。在这里介绍笔者用过的小工具——SRVINSTW.EXE(亦即srvinstw.exe),这个工具有汉化版本,操作很简单。以下两个链接都可以下载到。(还有其他很多网站上都能下载到此工具,在网上所搜一下就OK了。)
http://www.downxia.com/downinfo/22769.html
http://d.download.csdn.net/detail/netwolf712/3409182
二、代码实现
主要是OpenSCManager,CreateService,CloseServiceHandle等函数的运用。
//功能:安装**.sys文件。#include <windows.h>#include <winsvc.h>#include <stdio.h>void main(){ char name[3]="zx"; //服务名 char info[200]="sfok16"; // 服务描述 char path[300]="sfok16.sys"; //程序路径 (此处默认为在同一文件夹内) SC_HANDLE manager=NULL; SC_HANDLE service=NULL; if((manager=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE))==NULL) { printf("OpenSCManager Error"); } service=CreateService( manager,name,info, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, path,0,0,0,0,0); if(service) printf("服务创建成功\n\n"); else printf("服务创建失败\n\n"); CloseServiceHandle(service);}
三、通过.inf文件实现
inf文件,Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或j脚本以控制硬件操作。在INF文件中指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等。
inf文件才创建可以通过txt文件直接修改后缀名即可,如将编辑好的txt文件名直接改为“***.inf”(前提是已经将需要的代码已经写好),然后单击“右键”,选择“安装”。最难的是inf文件内部的内容(代码)如何书写。以下以一个名为zhang.sys的驱动加载到Windows内核中。(在实际操作中,可以找一个现有的inf文件,打开直接修改)
[Version]
signature = "$Windows NT$"
Class = "ActivityMonitor" ;This is determined by the work this filter driver does
ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2} ;This value is determined by the Class
Provider = %Msft%
DriverVer = 07/24/2012,1.0.0.3
CatalogFile = zhang.cat
[DestinationDirs]
DefaultDestDir = 12
MiniFilter.DriverFiles = 12 ;%windir%\system32\drivers
;; Default install sections
[DefaultInstall]
OptionDesc = %ServiceDescription%
CopyFiles = MiniFilter.DriverFiles
[DefaultInstall.Services]
AddService = %ServiceName%,,MiniFilter.Service
;;
;; Default uninstall sections
;;
[DefaultUninstall]
DelFiles = MiniFilter.DriverFiles
[DefaultUninstall.Services]
DelService = zhang,0x200 ;Ensure service is stopped before deleting
; Services Section
[MiniFilter.Service]
DisplayName = %ServiceName%
Description = %ServiceDescription%
ServiceBinary = %12%\%DriverName%.sys ;%windir%\system32\drivers\
Dependencies = "FltMgr"
ServiceType = 2 ;SERVICE_FILE_SYSTEM_DRIVER
StartType = 3 ;SERVICE_DEMAND_START
ErrorControl = 1 ;SERVICE_ERROR_NORMAL
LoadOrderGroup = "FSFilter Encryption"
AddReg = MiniFilter.AddRegistry
; Registry Modifications
[MiniFilter.AddRegistry]
HKR,"Instances","DefaultInstance",0x00000000,%Instance1.Name%
HKR,"Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
; Copy Files
[MiniFilter.DriverFiles]
%DriverName%.sys
[SourceDisksFiles]
zhang.sys = 1,,
[SourceDisksNames]
1 = %DiskId1%,,,
;; String Section
[Strings]
Msft = "Microsoft Corporation"
ServiceDescription = "encryption engine minfilter Driver"
ServiceName = "zhang"
DriverName = "zhang"
DiskId1 = "zhang Device Installation Disk"
;Instances specific information.
Instance1.Name = "zhang Instance"
Instance1.Altitude = "141000"
Instance1.Flags = 0x0 ; allow automatic attachments
四、“曲线救国”方法
不需要手动加载inf文件,代码调用inf文件即可。笔者运用的方法比较笨,找没找到代码直接调用inf文件的,采用了一种间接的方法。
写一个bat(批处理),在批处理里调用inf,而bat很容易从代码调用。
bat文件的语句:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 C:\Windows\engine.inf
其中,C:\Windows\engine.inf是inf文件的路径。
C/C++语言调用bat文件:
#include <windows.h>
WinExec("C:\\Windows\\AddService.bat", SW_SHOW);
其中, C:\\Windows\\AddService.bat是bat的路径。记得包含头文件windows.h
- Windows驱动程序的安装(一)
- Windows 驱动程序设计(一)
- windows CE下的USB设备驱动程序分析(一)
- windows CE下的USB设备驱动程序分析(一)
- Windows驱动程序开发学习笔记(一) - 下载并安装WDK
- windows 驱动程序安装
- Windows驱动程序设计详解(八)--- 驱动程序的同步处理
- 深入理解和使用Windows NT驱动程序的执行上下文(一)
- Windows CE下的USB设备驱动程序开发实例(一)
- Windows CE下的USB设备驱动程序开发实例(一)
- windows下的驱动程序编写学习日志(一)
- Windows驱动开发(10) - 驱动程序的同步处理(一)
- WAIK: 离线安装Windows驱动程序
- Windows驱动程序开发基础(四)驱动的编译调试和安装
- 最简单的Windows驱动程序编译、安装、运行、卸载
- windows安装设备的驱动程序软件遇…
- 安装WINDOWS缺少计算机所需的介质驱动程序解决方法
- Windows驱动程序的分类
- XML解析详解
- C语言SHELL排序算法
- UVa 10603 - Fill,经典倒水问题+隐式图搜索+dfs
- Ubuntu 11.10 运行QQ、迅雷、MS Office
- Android Map Api 使用和开发(1) 添加地图和界面
- Windows驱动程序的安装(一)
- 创建结构体的三种方式及其使用
- 电子商务创业失败的总结
- 23/7/2012 ICPC培训 第八天
- WDK和VS2012的下载、安装、视频介绍
- C++中函数建立临时变量的机制(const)
- 经典问答
- android view类 介绍
- 写在2012年7月23日