当前位置: 首页 > article >正文

visual studio 2022的windows驱动开发

在visual studio2022中,若在单个组件中找不到Windows Driver Kit (WDK)选项,可通过提升vs版本解决,在首次选择时选择WDM

       创建好项目在Source Files文件夹中创建一个test.c文件,并输入以下测试代码:

#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT pDriverObject)
{UNREFERENCED_PARAMETER(pDriverObject);DbgPrint("Goodbye!\n");
}NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{UNREFERENCED_PARAMETER(pRegistryPath);pDriverObject->DriverUnload = DriverUnload;DbgPrint("Hello, World!\n");return STATUS_SUCCESS;
}

构建运行时遇到以下问题:

主要原因是window sdk和WDK未安装成功,winsdksetup.exe是window sdk的安装程序,安装成功侯在程序中会有Windows Software Development Kit - Windows 10.0.22621.3233;wdksetup.exe是WDK安装程序。

接下来清理,重新生成报错:Device driver does not install on any devices, use primitive driver if this is intended.

程序自动生成的MyDriver1.inf文件如下:

;
; MyDriver1.inf
;[Version]
Signature="$WINDOWS NT$"
Class=System
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}
Provider=%ManufacturerName%
DriverVer=
CatalogFile=MyDriver1.cat
PnpLockdown=1[DestinationDirs]
DefaultDestDir = 13[SourceDisksNames]
1 = %DiskName%,,,""[SourceDisksFiles][Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$.10.0...16299 ; %13% support introduced in build 16299[Standard.NT$ARCH$.10.0...16299][Strings]
ManufacturerName="<Your manufacturer name>" ;TODO: Replace with your manufacturer name
DiskName="MyDriver1 Source Disk"

原因:INF 文件目前缺少 Service Install 部分,这是导致 Device driver does not install on any devices 错误的主要原因。你需要修改它,使其可以安装一个 软件驱动程序(Software-Only Driver),即 Primitive Driver

修改后的MyDriver1.inf文件如下:

;
; MyDriver1.inf - INF file for installing a software-only kernel driver
;[Version]
Signature="$WINDOWS NT$"
Class=System
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}
Provider=%ManufacturerName%
DriverVer=01/01/2025,1.0.0.0
CatalogFile=MyDriver1.cat
PnpLockdown=1[DestinationDirs]
DefaultDestDir = 12  ; SYSTEM32\DRIVERS 目录[SourceDisksNames]
1 = %DiskName%,,,""[SourceDisksFiles]
MyDriver1.sys = 1,, [Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$.10.0...16299 [Standard.NT$ARCH$.10.0...16299]
%MyDriver1.DeviceDesc% = MyDriver1_Install, Root\MyDriver1[MyDriver1_Install]
CopyFiles = MyDriver1.CopyFiles[MyDriver1.CopyFiles]
MyDriver1.sys[MyDriver1_Install.Services]
AddService = MyDriver1, 0x00000002, MyDriver1_Service_Inst[MyDriver1_Service_Inst]
DisplayName    = %MyDriver1.DeviceDesc%
ServiceType    = 1    ; SERVICE_KERNEL_DRIVER
StartType      = 3    ; SERVICE_DEMAND_START(手动启动)
ErrorControl   = 1    ; SERVICE_ERROR_NORMAL
LoadOrderGroup = Base
ServiceBinary  = %12%\MyDriver1.sys  ; 12 = SYSTEM32\DRIVERS 目录[Strings]
ManufacturerName="YourManufacturer" 
DiskName="MyDriver1 Source Disk"
MyDriver1.DeviceDesc="MyDriver1 Kernel Driver"

关键修改点

  1. 添加 Service Install 部分

    • MyDriver1_Install.Services 确保驱动被正确注册为 内核模式驱动

    • ServiceType = 1(代表内核驱动)。

    • StartType = 3(代表手动启动,可以用 sc start 启动)。

    • ServiceBinary = %12%\MyDriver1.sys 让系统知道驱动文件存放的位置。

  2. 定义设备

    • Root\MyDriver1 让 Windows 识别它是一个 软件驱动程序(不依赖硬件设备)

    • 这是关键修复,否则 Windows 10+ 认为你的驱动没有设备,导致安装失败。

  3. 修正 DestinationDirs

    • 你的驱动 .sys 文件应该放在 SYSTEM32\DRIVERS 目录,而不是 13(用户模式 DLL 目录)。

    • DefaultDestDir = 12(12 代表 C:\Windows\System32\drivers

编译后执行报错:

解决方法

1. 手动加载驱动

你需要使用 sc(Service Control Manager)或者 pnputil 命令手动加载驱动:

方法 1:使用 sc 命令
  1. 管理员模式打开 CMD

  2. 创建驱动服务

    sc create MyDriver1 type= kernel start= demand binPath= "E:\WorkSpace\TestProject\MyDriver1\x64\Debug\MyDriver1.sys"
    • type= kernel 表示这是一个内核驱动

    • start= demand 表示手动启动

  3. 启动驱动

    sc start MyDriver1

  4. 查看驱动状态

    sc query MyDriver1

  5. 停止并删除驱动 如果需要卸载驱动:

    sc stop MyDriver1 sc delete MyDriver1


方法 2:使用 pnputil 安装驱动

如果你有 INF 文件:

pnputil /add-driver MyDriver1.inf /install

然后使用 sc start MyDriver1 启动驱动

遇到问题:

sc start MyDriver1
[SC] StartService 失败 577:

Windows 无法验证此文件的数字签名。某软件或硬件最近有所更改,可能安装了签名错误或损毁的文件,或者安装的文件可能是来路不明的恶意软件。

这个错误表明 你的驱动未签名,或者 Windows 不允许加载未签名的驱动。从 Windows 10 及以后版本(尤其是 64 位 Windows),默认不允许加载未签名的内核驱动

方法 1:启用测试模式(推荐用于开发调试)

如果你的驱动只是用来开发和测试,你可以启用 测试签名模式,让 Windows 允许加载未签名的驱动。

步骤
  1. 打开 CMD(管理员模式),运行以下命令:

    bcdedit /set testsigning on

    你应该会看到:

    操作成功完成。

  2. 重启计算机

    shutdown /r /t 0

    计算机重启后,你会看到桌面右下角显示 测试模式,表示 Windows 允许加载未签名的驱动。

  3. 尝试重新启动驱动

    sc start MyDriver1


方法 2:临时禁用驱动签名强制

如果你不想长期启用测试模式,可以在每次启动时临时禁用驱动签名验证

步骤
  1. 重启电脑,在 启动 Windows 时F8(部分新电脑可能需要 Shift + F8)。

  2. 进入 高级启动选项,选择 "禁用驱动程序强制签名"Disable Driver Signature Enforcement)。

  3. 启动后,你可以运行:

    sc start MyDriver1

  1. 以管理员身份运行 PowerShell

    按 Win + X,选择 "Windows Terminal (管理员)" 或 "PowerShell (管理员)"
Add-MpPreference -ExclusionPath "E:\WorkSpace\TestProject\MyDriver1\x64\Debug\"

验证是否添加成功

Get-MpPreference | Select-Object -ExpandProperty ExclusionPath
  • 如果返回你的路径,说明已成功添加。

重新加载驱动:

安装驱动:sc create MyDriver1 type= kernel start= demand binPath= "E:\WorkSpace\TestProject\MyDriver1\x64\Debug\MyDriver1.sys"启动驱动:sc start MyDriver1查看驱动状态:sc query MyDriver1

执行完还是报错:

无法删除文件“E:\WorkSpace\TestProject\MyDriver1\x64\Debug\MyDriver1.sys”。对路径“E:\WorkSpace\TestProject\MyDriver1\x64\Debug\MyDriver1.sys”的访问被拒绝。

停止并删除驱动:
sc stop MyDriver1
sc delete MyDriver1
然后尝试删除文件:
del /f /q E:\WorkSpace\TestProject\MyDriver1\x64\Debug\MyDriver1.sys

报错:An error occurred while attempting to sign: E:\WorkSpace\TestProject\MyDriver1\x64\Debug\MyDriver1.sys

 

相关文章:

visual studio 2022的windows驱动开发

在visual studio2022中&#xff0c;若在单个组件中找不到Windows Driver Kit (WDK)选项&#xff0c;可通过提升vs版本解决&#xff0c;在首次选择时选择WDM 创建好项目在Source Files文件夹中创建一个test.c文件&#xff0c;并输入以下测试代码&#xff1a; #include <ntdd…...

基于大数据的美团外卖数据可视化分析系统

【大数据】基于大数据的美团外卖数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过对海量外卖数据的深度挖掘与分析&#xff0c;能够为美团外卖平台提供运营决策支…...

C/C++测试框架googletest使用示例

文章目录 文档编译安装示例参考文章 文档 https://github.com/google/googletest https://google.github.io/googletest/ 编译安装 googletest是cmake项目&#xff0c;可以用cmake指令编译 cmake -B build && cmake --build build将编译产物lib和include 两个文件夹…...

vue2打包部署到nginx,解决路由history模式下页面空白问题

项目使用的是vue2&#xff0c;脚手架vue-cli 4。 需求&#xff1a;之前项目路由使用的是hash&#xff0c;现在要求调整为history模式&#xff0c;但是整个过程非常坎坷&#xff0c;遇到了页面空白问题。现在就具体讲一下这个问题。 首先&#xff0c;直接讲路由模式由hash改为…...

如何将本地项目上传到Gitee的指定分支

在团队协作开发中&#xff0c;我们经常需要将本地项目代码上传到代码托管平台&#xff08;如Gitee&#xff09;的特定分支。本文将详细介绍从零开始完成这一过程的完整步骤&#xff0c;包含多种场景的解决方案和常见问题处理。 一、准备工作 1.1 安装Git 确保你的系统已安装…...

【数据结构】排序算法(中篇)·处理大数据的精妙

前引&#xff1a;在进入本篇文章之前&#xff0c;我们经常在使用某个应用时&#xff0c;会出现【商品名称、最受欢迎、购买量】等等这些榜单&#xff0c;这里面就运用了我们的排序算法&#xff0c;作为刚学习数据结构的初学者&#xff0c;小编为各位完善了以下几种排序算法&…...

AI随身翻译设备:从翻译工具到智能生活伴侣

文章目录 AI随身翻译设备的核心功能1. 实时翻译2. 翻译策略3. 翻译流程4. 输出格式 二、AI随身翻译设备的扩展功能1. 语言学习助手2. 旅行助手3. 商务助手4. 教育助手5. 健康助手6. 社交助手7. 技术助手8. 生活助手9. 娱乐助手10. 应急助手 三、总结四、未来发展趋势&#xff0…...

chromadb 安装和使用

简介 Chromadb 是一个开源的嵌入式向量数据库&#xff0c;专为现代人工智能和机器学习应用设计&#xff0c;旨在高效存储、检索和管理向量数据。以下是关于它的详细介绍&#xff1a; 核心特性 易于使用&#xff1a;提供了简洁直观的 API&#xff0c;即使是新手也能快速上手…...

【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具

【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具 资源简介 DeepSeek谷歌版1.1.5是目前全球领先的免费AI助手&#xff0c;性能超越国内主流AI产品&#xff0c;提供类似GPT-4的智能体验。 版本信息 最新版本&#xff1a;1.1.5&#xff08;2024最新版&#xff09;应用…...

LeetCode第132题_分割回文串II

LeetCode 第132题&#xff1a;分割回文串 II 题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文。 返回符合要求的 最少分割次数 。 难度 困难 题目链接 点击在LeetCode中查看题目 示例 示例 1&#xff1a; 输入&#xf…...

LabVIEW 在故障诊断中的算法

在故障诊断领域&#xff0c;LabVIEW 凭借其强大的图形化编程能力、丰富多样的工具包以及卓越的功能性能&#xff0c;成为工程师们进行故障诊断系统开发的得力助手。通过运用各种算法&#xff0c;能够对采集到的信号进行全面、深入的分析处理&#xff0c;从而准确地诊断出系统中…...

SQL DB 数据类型

SQL DB 数据类型 引言 在数据库管理系统中,数据类型是定义和存储数据的方式。SQL(结构化查询语言)数据库中的数据类型决定了数据的存储格式、大小、取值范围以及如何处理数据。合理选择和使用数据类型对于确保数据库性能、数据完整性和应用程序的准确性至关重要。 SQL 数…...

Qt音频输出:QAudioOutput详解与示例

1. 简介 QAudioOutput是Qt多媒体框架中的一个关键类&#xff0c;它提供了将PCM&#xff08;脉冲编码调制&#xff09;原始音频数据发送到音频输出设备的接口。作为Qt多媒体组件的一部分&#xff0c;QAudioOutput允许开发者在应用程序中实现音频播放功能&#xff0c;支持多种音…...

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

目录 springboot介绍 核心特性 快速搭建 Spring Boot 项目 方式一&#xff1a;使用 Spring Initializr 方式二&#xff1a;使用 IDE 插件 示例代码 1. 创建项目并添加依赖 2. 创建主应用类 3. 创建控制器类 4. 运行应用程序 配置文件 部署和监控 部署 监控 与其…...

Android学习之Material Components

以下是 Material Design 提供的核心控件列表&#xff08;基于最新 Material Components for Android 库&#xff09;&#xff0c;按功能分类整理&#xff1a; 1. 基础按钮类 控件名称类名说明MaterialButtoncom.google.android.material.button.MaterialButton遵循 Material 规…...

sentinel新手入门安装和限流,热点的使用

1 sentinel入门 1.1下载sentinel控制台 &#x1f517;sentinel管理后台官方下载地址 下载完毕以后就会得到一个jar包 1.2启动sentinel 将jar包放到任意非中文目录&#xff0c;执行命令&#xff1a; java -jar 名字.jar如果要修改Sentinel的默认端口、账户、密码&#xff…...

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(Xinference方式)

一、安装步骤 1.基础环境安装 安装显卡驱动、cuda&#xff0c;根据自己硬件情况查找相应编号&#xff0c;本篇不介绍这部分内容&#xff0c;只给出参考指令&#xff0c;详情请读者自行查阅互联网其它参考资料。 sudo apt install nvidia-utils-565-server sudo apt install…...

ANTLR 实战_从零开始构建自定义语言解析器

1. 引言 1.1 什么是 ANTLR ANTLR(Another Tool for Language Recognition)是一个强大的解析器生成器,用于构建语言解析器、编译器和解释器。 1.2 ANTLR 的历史与发展 ANTLR 由 Terence Parr 创建,最初发布于 1995 年。经过多次版本更新,ANTLR 已成为构建解析器的首选工…...

CTF类题目复现总结-hashcat 1

一、题目地址 https://buuoj.cn/challenges#hashcat二、复现步骤 1、下载附件&#xff0c;解压得到What kind of document is this_文件&#xff1b; 2、用010 Editor打开What kind of document is this_文件&#xff0c;发现是office文件&#xff1b; 3、将后缀名改为ppt时…...

4月5日作业

需求&#xff1a; 1.按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2.要求SW 1为VLAN 2/3的主根及主网关 SW2为VLAN 20/30的主根及主网关&#xff0c;SW1和 SW2互为备份 3.可以使用super vlan 4.上层通过静态路由协议完成数据通信过程 5.AR1为企业出口路由器…...

Bert论文解析

文章目录 BERT&#xff1a;用于语言理解的深度双向转换器的预训练一、摘要三、BERT介绍BERT及其详细实现答疑&#xff1a;为什么没有标注的数据可以用来预训练模型&#xff1f;1. 掩码语言模型&#xff08;Masked Language Model, MLM&#xff09;2. 下一句预测&#xff08;Nex…...

无招回归阿里

这两天&#xff0c;无招回归阿里的新闻被刷屏了。无招创业成立的两氢一氧公司无招的股份也被阿里收购&#xff0c;无招以这种姿态回归阿里&#xff0c;并且出任钉钉的 CEO。有人说&#xff0c;这是对 5 年前“云钉一体”战略的纠偏。现在确实从云优先到 AI 优先&#xff0c;但云…...

初探:简道云平台架构及原理

一、系统架构概述 简道云作为一款低代码开发平台&#xff0c;其架构设计以模块化和云端协同为核心&#xff0c;主要分为以下层次&#xff1a; 1. 前端层 可视化界面&#xff1a;基于Web的拖拽式表单设计器&#xff0c;支持动态渲染&#xff08;React/Vue框架&#xff09;。多…...

LeetCode 热题 100 堆

215. 数组中的第K个最大元素 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 **k** 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 …...

面试常被问道OSPF的问题

面试中经常会涉及到OSPF相关的问题&#xff0c;作为网络工程师&#xff0c;我们对OSPF的了解可不能仅停留在“我知道它是路由协议”这么表面。 想面试官满意&#xff0c;拿到Offer&#xff0c;必须能回答得出细节&#xff0c;深度挖掘它的工作原理、配置技巧、以及应用场景。 …...

Redis(笔记)

简介&#xff1a; 常用数据类型: 常用操作命令&#xff1a; Redis的Java客户端&#xff1a; 操作字符串类型的数据&#xff1a; 操作Hash类型的数据&#xff1a; 操作列表类型的数据&#xff1a; 操作集合类型的数据&#xff1a; 操作有序集合类型数据&#xff1a; 通用命令…...

bootloader+APP中,有些APP引脚无法正常使用?

问&#xff1a;bootloaderAPP程序中&#xff0c;为什么有些APP引脚无法正常使用&#xff1f;无法设置高低电平 主控芯片GD32F415&#xff0c;参考案例bootloader中的引脚使用&#xff1a; 参考案例APP程序的引脚使用&#xff1a; 以及个人使用的无线模组&#xff0c;高电平使能…...

高并发内存池:原理、设计与多线程性能优化实践

高并发内存池是一种专门为多线程环境设计的内存管理机制&#xff0c;其核心目标是通过优化内存分配和释放过程&#xff0c;解决传统内存分配器&#xff08;如malloc/free&#xff09;在高并发场景下的性能瓶颈&#xff0c;显著提升多线程程序的内存访问效率。 目录 一、核心设计…...

基于内容的课程推荐网站的设计与实现00(SSM+htmlL)

基于内容的课程推荐网站的设计与实现(SSMhtml) 该系统是一个基于内容的课程推荐网站&#xff0c;旨在为用户提供个性化的课程推荐。系统包含多个模块&#xff0c;如教学视频、教学案例、课程信息、系统公告、个人中心和后台管理。用户可以通过首页访问不同的课程分类&#xff…...

生活电子常识--删除谷歌浏览器搜索记录

前言 谷歌浏览器会记录浏览器历史搜索,如果不希望看到越来越多的搜索记录,可以如下设置 解决 设置-隐私-自动填充表单 这个和浏览器记录的密码没有关系,可以放心删除...