WDM驱动实操No.1
一、虚拟驱动如何绑定一个实际硬件安装该驱动?
1、实际硬件:网卡
硬件ID:PCI\VEN_8086&DEV_10D3
对应于虚拟驱动INF文件中的:
%wdk_s2_c13_test1_driver.DeviceDesc%=Root\wdk_s2_c13_test1_driver ; TODO: edit hw-id
修改:只要将Root\wdk_s2_c13_test1_driver 变更为 PCI\VEN_8086&DEV_10D3即可
%wdk_s2_c13_test1_driver.DeviceDesc%=wdk_s2_c13_test1_driver_Device, PCI\VEN_8086&DEV_10D3
;Root\wdk_s2_c13_test1_driver ; TODO: edit hw-id
拓展:也就是改变驱动中对应的硬件ID就可以绑定对应的实际硬件;在项目中,一个驱动可能需要适配不用的设备,就是通过设备的硬件ID进行识别区分的。
2、安装驱动
2.1 log
00000020 8.29713917 Enter HelloWDMPnp
00000021 8.29730415 PNP Request (IRP_MN_QUERY_DEVICE_RELATIONS)
00000022 8.29730892 Enter DefaultPnpHandler
00000023 8.29731083 Leave DefaultPnpHandler
00000024 8.29731369 Leave HelloWDMPnp
00000025 8.31659031 Enter HelloWDMPnp
00000026 8.31659794 PNP Request (IRP_MN_QUERY_REMOVE_DEVICE)
00000027 8.31660080 Enter DefaultPnpHandler
00000028 8.31660366 Leave DefaultPnpHandler
00000029 8.31660557 Leave HelloWDMPnp
00000030 8.34850597 Enter HelloWDMPnp
00000031 8.34851360 PNP Request (IRP_MN_REMOVE_DEVICE)
00000032 8.34851646 Enter HandleRemoveDevice
00000033 8.34851837 Enter DefaultPnpHandler
00000034 8.34851933 Leave DefaultPnpHandler
00000035 8.34856892 Leave HandleRemoveDevice
00000036 8.34857082 Leave HelloWDMPnp
00000037 8.34865093 Enter HelloWDMUnload
00000038 8.34865284 Leave HelloWDMUnload
00000039 8.52089310 Enter DriverEntry
00000040 8.52089691 Leave DriverEntry
00000041 8.52099895 Enter HelloWDMAddDevice
00000042 8.52149391 \??\ROOT#UNKNOWN#0002#{0e57c50f-0ccc-4ad2-a895-93c5ed221301}
00000043 8.52150917 Leave HelloWDMAddDevice
00000044 8.52157593 Enter HelloWDMPnp
00000045 8.52157879 Enter DefaultPnpHandler
00000046 8.52158070 Leave DefaultPnpHandler
00000047 8.52165890 Enter HelloWDMPnp
00000048 8.52166271 PNP Request (IRP_MN_FILTER_RESOURCE_REQUIREMENTS)
00000049 8.52166462 Enter DefaultPnpHandler
00000050 8.52166557 Leave DefaultPnpHandler
00000051 8.52166843 Leave HelloWDMPnp
00000052 8.52198410 Enter HelloWDMPnp
00000053 8.52198792 PNP Request (IRP_MN_START_DEVICE)
00000054 8.52199078 Enter HandleStartDevice
00000055 8.52199268 Enter DefaultPnpHandler
00000056 8.52199554 Leave DefaultPnpHandler
00000057 8.52200031 Leave HandleStartDevice
00000058 8.52200127 Leave HelloWDMPnp
00000059 8.52213955 Enter HelloWDMPnp
00000060 8.52214336 PNP Request (IRP_MN_QUERY_CAPABILITIES)
00000061 8.52214527 Enter DefaultPnpHandler
00000062 8.52214718 Leave DefaultPnpHandler
00000063 8.52216434 Leave HelloWDMPnp
00000064 8.52219105 Enter HelloWDMPnp
00000065 8.52219391 PNP Request (IRP_MN_QUERY_PNP_DEVICE_STATE)
00000066 8.52219486 Enter DefaultPnpHandler
00000067 8.52219677 Leave DefaultPnpHandler
00000068 8.52219868 Leave HelloWDMPnp
00000069 8.52226353 Enter HelloWDMPnp
00000070 8.52226734 PNP Request (IRP_MN_QUERY_DEVICE_RELATIONS)
00000071 8.52226925 Enter DefaultPnpHandler
00000072 8.52227020 Leave DefaultPnpHandler
00000073 8.52227306 Leave HelloWDMPnp
00000074 8.57192612 Enter HelloWDMAddDevice
00000075 8.57197285 \??\ROOT#UNKNOWN#0001#{0e57c50f-0ccc-4ad2-a895-93c5ed221301}
00000076 8.57197952 Leave HelloWDMAddDevice
00000077 8.57201672 Enter HelloWDMPnp
00000078 8.57201862 Enter DefaultPnpHandler
00000079 8.57201958 Leave DefaultPnpHandler
00000080 8.57206440 Enter HelloWDMPnp
00000081 8.57206535 PNP Request (IRP_MN_FILTER_RESOURCE_REQUIREMENTS)
00000082 8.57206726 Enter DefaultPnpHandler
00000083 8.57206821 Leave DefaultPnpHandler
00000084 8.57206917 Leave HelloWDMPnp
00000085 8.57210255 Enter HelloWDMPnp
00000086 8.57210827 PNP Request (IRP_MN_START_DEVICE)
00000087 8.57210922 Enter HandleStartDevice
00000088 8.57211018 Enter DefaultPnpHandler
00000089 8.57211113 Leave DefaultPnpHandler
00000090 8.57211399 Leave HandleStartDevice
00000091 8.57211494 Leave HelloWDMPnp
00000092 8.57217312 Enter HelloWDMPnp
00000093 8.57217407 PNP Request (IRP_MN_QUERY_CAPABILITIES)
00000094 8.57217503 Enter DefaultPnpHandler
00000095 8.57217598 Leave DefaultPnpHandler
00000096 8.57218552 Leave HelloWDMPnp
00000097 8.57219982 Enter HelloWDMPnp
00000098 8.57220173 PNP Request (IRP_MN_QUERY_PNP_DEVICE_STATE)
00000099 8.57220364 Enter DefaultPnpHandler
00000100 8.57220364 Leave DefaultPnpHandler
00000101 8.57220459 Leave HelloWDMPnp
00000102 8.57225800 Enter HelloWDMPnp
00000103 8.57225895 PNP Request (IRP_MN_QUERY_DEVICE_RELATIONS)
00000104 8.57225990 Enter DefaultPnpHandler
00000105 8.57226181 Leave DefaultPnpHandler
00000106 8.57226276 Leave HelloWDMPnp
然后将网卡驱动更新之后:
就会将设备与微软的驱动绑定;
2.2 理解启动设备和禁用设备
因为是即插即用,我们首先得将驱动和设备区分开;驱动是一种程序,躺在内存中。当有一个设备插入(也相当于我们启用一个设备),那么就会去找驱动程序,找到后,驱动就开始为设备服务了。也就是,一个驱动可以为很多不同时段插入的设备服务,也就是加载驱动。加载驱动中就有创建设备,其实就是为实际的硬件创建一个软件的形式,使得能与设备进行交互,所以启用设备都会创建一个设备对象。
WDM驱动实操No.1相关推荐
- Linux LCD屏幕驱动调参实操
Linux LCD屏幕驱动调参实操 初探 Linux下的 LCD 驱动文中提到过, IMX6ULL的 eLCDIF接口驱动程序已经有半导体厂家NXP编写好了,并且不同分辨率LCD屏的eLCDIF接口驱 ...
- 【电机应用控制】——直流有刷电机驱动板/编码器介绍PID算法实操代码思路
目录 前言 一.电机简介 二.直流有刷电机 1.基本知识 2.直流有刷驱动板 3.编码器介绍 三.PID算法 四.实操思路 1.单环控制 2.双环控制 3.三环控制 拓:闭环死区 总结 前言 声明:学 ...
- 华为昇腾师资培训沙龙·南京场 |华为昇腾 ACL 语言开发实践全程干货来了!看完就实操系列...
自今年疫情以来,AI 技术加速进入了人们的视线,在抗疫过程中发挥了重要作用,产业发展明显提速,我国逐步走出了一条由需求导向引领商业模式创新.市场应用倒逼基础理论和关键技术创新的发展道路,AI 人才的争 ...
- MetagenoNets:在线宏基因组网络分析实操教程
宏基因组研究中网络分析已经十分普及,但却缺少整合的分析方法,限制了广大同行的使用. 关于网络分析的基本步骤,和现在工具的比较,详见原文解读 - NAR:宏基因组网络分析工具MetagenoNets 本 ...
- 网络分析系统_MetagenoNets:在线宏基因组网络分析实操教程
宏基因组研究中网络分析已经十分普及,但却缺少整合的分析方法,限制了广大同行的使用. 关于网络分析的基本步骤,和现在工具的比较,详见原文解读 - NAR:宏基因组网络分析工具MetagenoNets 本 ...
- 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?
从2012年开始,中国在线教育行业的市场就整体保持着高增长的趋势.随着"校外报课"逐渐成为中国家长的刚需,成人教育机构也一同进入了K12市场.在这场愈发激烈的市场竞争中,在线教育企 ...
- stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享
原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...
- micropython入门教程-Micropython入门实操心得
1. 用串口线连接pyboard和电脑,发现开发板被识别为移动磁盘. 2 .移动磁盘中默认会有4个文件,它们分别是: boot.py:开机最先运行的文件,最后会由它加载main.py. main.py ...
- 理论+实操: MySQL索引与事务、视图、存储过程(软件开发用的多)、存储引擎MyISAM和InnoDB
文章目录 一:索引的概念 二:索引的作用 三:索引的分类 3.1 普通索引 3.2 唯一性索引 3.3 主键 3.4 全文索引 3.5 单列索引与多列索引 四:创建索引的原则依据 五:创建索引的方法 ...
- 公司股权分配的七大简明实操建议
导读: 创业者通常采用两种方式确定公司的股权结构,一是按照股东的出资比例进行分配,二是在股东之间平均分配. 创业者通常采用两种方式确定公司的股权结构,一是按照股东的出资比例进行分配,二是在股东之间平均 ...
最新文章
- PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症
- 14 类编程题解法总结
- 支付宝被曝光了一段视频,或许“刷脸支付”的时代就要来临了
- 动态规划专题 01背包问题详解【转】
- vmware搭建ubuntu虚拟机(包含安装搜狗输入法和apt,dpkg的使用教程)
- jooq代码生成_将jOOQ与Spring结合使用:代码生成
- 前端学习(2185):tabberitem传入active图片
- 过滤器-filter
- rk399_android7.1的mipi驱动代码追踪(部分)
- 超定方程组的经典Gram-Schmidt正交化解法
- mysql卸载报错1606_MySQL5卸载及重装出错问题记录
- 一、MySQL数据库优化策略
- 在matlab中产生dsp程序学习
- Redis和MySQL保持数据一致性
- h3cmsr830series说明书_H3C MSR830路由器怎么设置?
- NS3运行Reno,BBR,CUBIC等拥塞控制算法
- 如何让3ds Max 2016导入smd文件
- 企业如何做新闻软文发布? 软文推广和新闻源发布有何不同之处?
- 中国地质大学英语语音学习笔记(八):英语重音与重音移位——为发音添彩
- mysql忘记root密码如何重新设置
热门文章
- jaxen-1.1-beta-6.jar下载地址
- 如何解二阶齐线性微分方程
- 两场直播丨易鲸捷分布式数据库的并发控制 、PostgreSQL日常工作分享
- oracle自动导出awr报告,自动生成awr报告脚本
- Windows 11企业版虚拟机镜像官方版下载及安装
- sz命令获取文件到本地路径设置
- 批处理变量输出时提示“ECHO处于关闭状态”
- 使用谷歌浏览器出现插件未就绪以及CLodop云打印服务(localhost本地)未安装启动!请下载安装包!
- 一个完整的性能测试流程
- 性能测试流程和各阶段的工作