Windows驱动程序的安装(一)
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");elseprintf("服务创建失败\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 Server 中的 Windows 更新来安装打印机驱动程序 - Windows Server | Microsoft Docs...
打印机驱动程序无法通过 Windows Server 2019 Windows Server 2016 Windows Update 进行安装 12/07/2020 本文内容 本文提供了从 Windo ...
- 禁止Windows更新自动安装驱动程序
禁止Windows更新自动安装驱动程序 问题 解决方案 方案1:修改系统设置 方案2:修改组策略 方案3:修改注册表 方案4:回退驱动 问题 Windows更新时,会自动更新驱动程序,甚至有时会将驱动 ...
- 在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序(2/2)
在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序(2/2) 升级硬件固件 在安装了升级硬件固件所必要的驱动程序后,就可以升级硬件固件了,在下载的硬件驱动和相关程序 ...
- windows驱动程序编写_如何在Windows中回滚驱动程序
windows驱动程序编写 Updating a driver on your PC doesn't always work out well. Sometimes, they introduce b ...
- 如何在 Windows 10 上安装 WSL 2
翻译自 Joey Sneddon 2020年10月30日的文章<How to Install WSL 2 on Windows 10> [1] 如果您想在最新的 Windows 版本中尝试 ...
- firefox驱动_零适配 + 全兼容!龙芯电脑推出办公外设利旧通用解决方案:运行原生 Windows 驱动程序...
龙芯中科宣布推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的 Windows 驱动程序,具有 "零适配.全兼 ...
- 在未提供官方驱动的Windows平板上安装Win10且完美驱动的解决方案
笔者手上有一台七彩虹i108W的Windows平板,Windows 10刚正式发布,按耐不住就想在平板上安装新的系统.从Windows 8.1直接升级至Windows 10,无奈遇到了page fau ...
- 新手如何第一次编写 “Hello World“ Windows 驱动程序 (KMDF)
本主题介绍如何使用内核模式驱动程序框架 (KMDF) 编写一个非常小的通用 Windows 驱动程序,然后在单独的计算机上部署和安装您的驱动程序. 要开始使用,请确保您已安装Microsoft Vis ...
- 在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序
在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序 备份数据 先备份数据,由于原来的Windows XP已经不能正常启动,因此就使用光驱启动Windows XP P ...
最新文章
- CBinsight | 分析101个创业失败案例,我们总结了20大失败原因
- redis入门及java操作
- python路径拼接问题
- 《程序员修炼之道(第2版)》!屹立20年王者归来!
- ajax get 不会缓存,ajax的get请求时缓存处理解决方法
- python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息
- 在Windows 7中安装、配置和使用IIS7和ASP
- JavaScript 原始数据类型转换
- oracle数据库报错09275,项目连接Oracle数据库报错
- 公交车座位的坐垫设计成可替换,冬夏两用
- 【NCD 2019 B】Let me sleep【边双连通分量缩点、树的直径】
- arm9处理器 java_ARM处理器系列介绍
- DTcms-【数据库】-关系分析
- 微信小程序之点点考勤经验总结
- Python 使用Gmail发送邮件
- python 实现日期计算器
- 拒绝iap cracker
- 从零到英雄:资产商店发行人的故事
- Linux账号与身份管理
- 【Unity】动作游戏开发实战详细分析-16-敌人AI设计
热门文章
- 阿特拉斯拧紧枪说明书_阿特拉斯枪样本.pdf
- 类之间的关系(关联、继承、聚合、组合、依赖、实现)
- 视图类成员函数GetDocument()和OnDraw()
- 我十年的程序员生涯----雷军(写于1996年)
- Python socket 获取本机IP地址
- 如何在Excel中打印特定的单元格选择
- 视音频编解码基本术语及解释MediaInfo
- 【吃灰板子捡起来】按键输入实验
- 【吃灰板子捡起来】LED驱动开发实验
- cpu z for linux,【CPU-Z和搜狗输入法 For Linux哪个好用】CPU-Z和搜狗输入法 For Linux对比-ZOL下载...