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驱动程序的安装(一)相关推荐

  1. 微软打印机驱动服务器,无法通过 Windows Server 中的 Windows 更新来安装打印机驱动程序 - Windows Server | Microsoft Docs...

    打印机驱动程序无法通过 Windows Server 2019 Windows Server 2016 Windows Update 进行安装 12/07/2020 本文内容 本文提供了从 Windo ...

  2. 禁止Windows更新自动安装驱动程序

    禁止Windows更新自动安装驱动程序 问题 解决方案 方案1:修改系统设置 方案2:修改组策略 方案3:修改注册表 方案4:回退驱动 问题 Windows更新时,会自动更新驱动程序,甚至有时会将驱动 ...

  3. 在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序(2/2)

    在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序(2/2) 升级硬件固件 在安装了升级硬件固件所必要的驱动程序后,就可以升级硬件固件了,在下载的硬件驱动和相关程序 ...

  4. windows驱动程序编写_如何在Windows中回滚驱动程序

    windows驱动程序编写 Updating a driver on your PC doesn't always work out well. Sometimes, they introduce b ...

  5. 如何在 Windows 10 上安装 WSL 2

    翻译自 Joey Sneddon 2020年10月30日的文章<How to Install WSL 2 on Windows 10> [1] 如果您想在最新的 Windows 版本中尝试 ...

  6. firefox驱动_零适配 + 全兼容!龙芯电脑推出办公外设利旧通用解决方案:运行原生 Windows 驱动程序...

    龙芯中科宣布推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的 Windows 驱动程序,具有 "零适配.全兼 ...

  7. 在未提供官方驱动的Windows平板上安装Win10且完美驱动的解决方案

    笔者手上有一台七彩虹i108W的Windows平板,Windows 10刚正式发布,按耐不住就想在平板上安装新的系统.从Windows 8.1直接升级至Windows 10,无奈遇到了page fau ...

  8. 新手如何第一次编写 “Hello World“ Windows 驱动程序 (KMDF)

    本主题介绍如何使用内核模式驱动程序框架 (KMDF) 编写一个非常小的通用 Windows 驱动程序,然后在单独的计算机上部署和安装您的驱动程序. 要开始使用,请确保您已安装Microsoft Vis ...

  9. 在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序

    在ThinkPad W500 A98上升级Windows 7以及安装硬件驱动和相关程序 备份数据 先备份数据,由于原来的Windows XP已经不能正常启动,因此就使用光驱启动Windows XP P ...

最新文章

  1. CBinsight | 分析101个创业失败案例,我们总结了20大失败原因
  2. redis入门及java操作
  3. python路径拼接问题
  4. 《程序员修炼之道(第2版)》!屹立20年王者归来!
  5. ajax get 不会缓存,ajax的get请求时缓存处理解决方法
  6. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息
  7. 在Windows 7中安装、配置和使用IIS7和ASP
  8. JavaScript 原始数据类型转换
  9. oracle数据库报错09275,项目连接Oracle数据库报错
  10. 公交车座位的坐垫设计成可替换,冬夏两用
  11. 【NCD 2019 B】Let me sleep【边双连通分量缩点、树的直径】
  12. arm9处理器 java_ARM处理器系列介绍
  13. DTcms-【数据库】-关系分析
  14. 微信小程序之点点考勤经验总结
  15. Python 使用Gmail发送邮件
  16. python 实现日期计算器
  17. 拒绝iap cracker
  18. 从零到英雄:资产商店发行人的故事
  19. Linux账号与身份管理
  20. 【Unity】动作游戏开发实战详细分析-16-敌人AI设计

热门文章

  1. 阿特拉斯拧紧枪说明书_阿特拉斯枪样本.pdf
  2. 类之间的关系(关联、继承、聚合、组合、依赖、实现)
  3. 视图类成员函数GetDocument()和OnDraw()
  4. 我十年的程序员生涯----雷军(写于1996年)
  5. Python socket 获取本机IP地址
  6. 如何在Excel中打印特定的单元格选择
  7. 视音频编解码基本术语及解释MediaInfo
  8. 【吃灰板子捡起来】按键输入实验
  9. 【吃灰板子捡起来】LED驱动开发实验
  10. cpu z for linux,【CPU-Z和搜狗输入法 For Linux哪个好用】CPU-Z和搜狗输入法 For Linux对比-ZOL下载...