Windows驱动开发
文章平均质量分 75
Sagittarius_Warrior
这个作者很懒,什么都没留下…
展开
-
Windows驱动开发之准备篇
近日,公司人心浮动,我们小组负责驱动开发的小伙也提离职了,领导说,让我这个组长自己搞定。于是乎,开始跨界准备“Windows驱动开发”的学习。废话不多说,开始准备学习资料和熟悉“Windows驱动开发和调试工具”。一、学习资料1,《Windows驱动开发技术详解》(张帆) 这本书绝对是入门级的经典书,必须认真阅读。它从两个最简单的驱动谈起,逐步引入“Windows原创 2016-03-01 09:38:19 · 2048 阅读 · 0 评论 -
多个设备同一个驱动
近日,看了博客:多个设备对象(同一个驱动),它创建了多个设备对象,对应不同的设备,但是采用该博文介绍的方法创建的设备对象是垂直关系的。有没有多个设备对象呈水平关系的方法呢?下面将以微软发布的“PLX9x5x设备驱动示例”进行讲解。 多个设备,同一个驱动,主要是配置inf文件。 该示例的Inf文件既包含了两个设备——“9056”和“9656”。但是这两个设原创 2016-04-18 18:36:54 · 5363 阅读 · 0 评论 -
借助WinDriver认识Windows PCIE设备的空间结构
本文主要通过WinDriver工具图形化的查看PCIe设备,来认识PCIe设备的空间结构。本文主要参考《PCI Express体系结构导读》和网友博客:点击打开链接。一、PCIe设备空间结构 PCIe设备有三个独立的物理地址空间:设备存储器空间(memory)、IO空间和配置空间(config)。由于PCIe设备支持即插即用,存储器空间和IO空间是在设备插入host后原创 2016-05-06 17:19:41 · 6363 阅读 · 0 评论 -
DMA传输中的内存对齐
本文主要讲述在host与device之间DMA传输时,一个与“内存对齐”相关的,并最终引起系统概率性蓝屏的bug。参考博文:内存对齐内存对齐2参考博文3参考博文4原创 2016-05-18 13:47:40 · 6653 阅读 · 0 评论 -
Windows Driver Samples剖析之Echo (三)
本文还是遵循”由表入里“的原则,先讲解Echo工程中的”echoapp“,从与驱动交互的应用程序入手逐步了解驱动程序的机制。一、程序流程 如下图,该程序先通过”GetDevicePath“函数,使用与驱动绑定(共用Public.h文件)的GUID,去注册表中获取”设备的符号名“(字符串)。然后调用”CreateFile“函数,通过该符号名打开设备,获得设备句柄。拿到设备句柄后原创 2016-05-27 17:17:31 · 2070 阅读 · 0 评论 -
32位的整型数拆分为两个浮点数的方法
在数字信号处理领域,常常需要将基带采集的AD数据传送到PC,并进行相应的处理和数据可视化。在基带,特别是FPGA中,一般不采用浮点运算,故基带会用一个unsigned long来表示一对IQ数据,其中高16位表示I路,低16位表示Q路。基带将这样的一堆usigned long传递给上位机后,上位机需要将它们拆分位两个浮点型的数组来存储。这个拆分可以用如下的一个函数来完成:void ULONG2原创 2016-04-23 09:19:46 · 2440 阅读 · 0 评论 -
Windows Driver Samples剖析之Echo (二)
本文先带大家体验一下Echo工程的编译、安装和测试过程,建立一个感性的认识。后续再继续深入。一、编译 使用VS2015(带WDK10)打开“kmdfecho.sln”工程,选择“X64”模式(适配目标平台),然后build。它会在“driver\AutoSync”、“driver\DriverSync” 和“exe”三个子目录下分别生成各自的目标文件。其中属于“driver\原创 2016-05-27 14:59:17 · 1569 阅读 · 1 评论 -
使用TraceView观察Windows PCIE驱动设备加载和卸载过程
本文主要结合TraceView.exe工具,介绍一个典型的KMDF驱动程序的加载和卸载过程。相关理论主要来自《Win7设备驱动程序开发》一书。关于TraceView.exe的使用,可以参考我之前的博客:点击打开链接。一、启动和加载顺序 在《Win7设备驱动程序开发》的7.2节——“设备的枚举和启动”中,提到:为了准备操作设备,KMDF将按固定顺序调用驱动程序的回调例程。其中F原创 2016-05-06 16:47:16 · 4347 阅读 · 0 评论 -
Windows Driver Samples剖析之Echo(五)
本文继续上一篇介绍kmdf echo工程的AutoAsyn模块,主要介绍与请求处理和同步相关的queue.c文件。事实上,整个驱动代码,driver.c和device.c都是框架性的代码,只有queue.c是处理实际业务的,用户的自定义功能一般放到该部分来实现,故将它独立成一篇。一、EchoQueueInitialize 该例程主要干了三件事: 1)The原创 2016-06-14 14:55:29 · 1601 阅读 · 0 评论 -
Windows Driver Samples剖析之Echo(四)
本文主要讲解kmdf echo工程的AutoAsyn模块,它是一个自动同步的(支持异步调用的)driver。其中,AutoAsyn —— Auto Asynchronous。一、文件结构 它主要包括8个文件:echo.inx —— 用于生成INF文件,public.h —— 与应用程序共享的头文件,传递GUID和IOCTL CODE。driver.h和driver.c,驱原创 2016-06-13 15:08:34 · 1477 阅读 · 1 评论 -
设备驱动的INF文件介绍
参考一:百度百科参考二:INF文件的节参考三:wikipedia参考四:msdn转载 2016-04-16 10:08:55 · 1918 阅读 · 0 评论 -
Windows内核函数的前缀
Winodws操作系统采用的是“client-server”设计模式,在用户层和内核层提供不同的系统函数,供程序员使用。其结构如下: 如上图,Win32子系统将Win32 API转为Native API,故以Nt前缀开头的都是Native API,它还是属于用户层。通过Native API,建立与内核层的联系。 在C盘的Windows文原创 2016-03-31 13:26:03 · 2584 阅读 · 0 评论 -
WinDbg学习笔记
WinDbg学习笔记 帖子中附文档下载转载 2016-04-21 17:30:11 · 715 阅读 · 0 评论 -
介绍三种应用程序对设备异步操作的方法
应用程序对设备的操作就要是通过“ReadFile"、”WriteFile“和”DeviceIOControl“等Win32 API发起。这些Win32 API都支持同步和异步两种操作方式。从应用程序的调用来看,其主要差异是:1)调用CreateFile函数的时候,是否设置了它的第六个参数”dwFlagsAndAttributes“(设备属性)。同步操作设为NULL,异步操作设为FILE_FLAG_原创 2016-06-01 10:58:28 · 1228 阅读 · 0 评论 -
Win10驱动数字签名的解决办法
方法一:采用高级重启的方式,点击打开链接方法二:下载“EASYBCD”软件;方法三:1,系统启动时,按“delete”进BIOS;2,在BIOS中,关闭“默认系统”,这样就可以在每次开机时进“Windows启动管理器”;另外,也可参考如下方法进“Windows启动管理器”(点击打开链接)3,在“Windows启动管理器”中,按F8进高级设置页面,再选“禁用数原创 2016-04-07 19:48:44 · 30687 阅读 · 0 评论 -
Windows Driver Samples剖析之Echo(六)
本文将讲解DriverSync驱动代码,并比较它与AutoSync的差异。一、代码比较 先借助BeyondCompare工具比较driversync和autosync工程,如下: 从上图可知(主要观察颜色和中间一列):1)driver.c文件的代码几乎相同,不同的是driversync的driver.h中多定义了一个Request原创 2016-06-16 15:55:45 · 1221 阅读 · 0 评论 -
Windows Driver Samples剖析之Echo (一)
一、Echo是什么1,Echo,字典上的意思是:1)反射,vt.;2)发送回声,随声附和,vi.;3)回声。2,在TCP/IP通信中,提到“client和server之间实现了一个Echo协议(应答协议)”。3,在shell语言中,无论是linux的bash中,还是windows的cmd中,echo命令表示“显示,回显”。 echo命令可以显示真实的系原创 2016-05-26 17:22:18 · 2034 阅读 · 0 评论 -
《Win7设备驱动程序开发》学习笔记
《Windows 7 设备驱动程序开发》是美国Ronald D. Reeves著的一本关于WDF模型的Windows 驱动程序开发教程,适用于Win7和Win10。本文我学习该书的一些笔记,目前主要是一些知识点的索引,通过本文可以迅速找到对应知识点的章节,后续将增加知识点的讲解和个人理解以及扩展链接。内容如下(不断更新中):-------------------------------原创 2016-06-14 15:31:47 · 7376 阅读 · 1 评论 -
Windows驱动开发之入门篇(一)
本文主要介绍“如何入门Windows驱动开发”和“新手需要掌握哪些知识和动手技能”,大部分是本人探索Windows驱动开发近一月时间的经验之谈。大致包括如下几个方面:1,开发工具、调试工具和调试手段;2,Windows驱动开发框架;3,驱动程序基本知识;4,PCIE驱动程序;5,学习资料 以上内容在本文仅做简单介绍,后续随着本人经验的增加,将经常更新本文,并对原创 2016-03-28 20:03:02 · 44452 阅读 · 6 评论 -
Windows DMA驱动调试
本文记录我调试微软官方提供的一个PCI驱动sample程序的过程。一、开发环境和资源下载1,在win10 X64操作系统下,安装VS2015+WDK10。(参考我前面的驱动开发入门篇)2,使用TI6655 DSP开发板,点击打开链接。3,下载微软官方发布在github上的驱动samples,点击打开链接,选择其中的“General/PLX9x5x”这个工程。4,参考微软关于wi原创 2016-04-09 17:39:18 · 4528 阅读 · 0 评论 -
介绍一个windows设备操作工具——devcon.exe
Windows操作系统对设备的管理,可以通过设备管理器查看。在cmd窗口键入”devmgmt.msc“,即可打开设备管理器。本文要介绍的是微软提供的一个操作设备的工具软件——devcon.exe(Windows Device Console)原创 2016-04-27 17:30:50 · 17014 阅读 · 0 评论 -
一个简单的PCIE驱动到设备的通信协议
本文主要介绍一个简单的单一设备PCIE驱动程序和设备的通信协议,从上到下大致分为三层:应用层、驱动层和设备层。其中,应用层和驱动层通过系统总线(win32 API调用)实现通信,驱动层和设备层通过PCI总线(地址空间映射)进行通信。一、Driver和Device的数据交互方式 Driver和Device的通信主要是通过地址空间映射来实现。操作系统将Device的物理地原创 2016-04-15 09:38:13 · 12105 阅读 · 0 评论 -
KMDF工程新增source文件出现的"TraceEvents未定义”编译错误
问题引入:在windows驱动开发过程中,我们一般会用VS2015+WDK10,新建一个KMDF工程(非empty)。该过程可参考我的另一篇博客:点击打开链接。这个工程新建好了,并能编译通过,但有时我们需要在该工程中新增source文件。通过在VS中“添加现有项"或”新增加项“的方式添加一个或几个新的源文件到工程中。然后再编译,会报错”error C4013: “TraceEvents”未定义原创 2016-04-26 14:40:38 · 3226 阅读 · 0 评论 -
PCI总线地址空间与系统地址空间的关系
PCI总线地址空间与系统地址空间的关系转载 2016-04-13 17:15:53 · 698 阅读 · 0 评论 -
KMDF的WDFREQUEST对象
创建框架请求对象获取IO请求的相关信息转载 2016-04-25 14:53:58 · 1045 阅读 · 0 评论 -
win10下使用VS2015+WDK10生成win7 X64的设备驱动的过程
本文主要介绍“win10下使用VS2015+WDK10生成win7 X64的设备驱动”的过程,并在win7 X64下安装的过程。具体如下:1,在win10下,使用VS2015+WDK10新建一个KMDF工程,命名为“MyKMDF”,注意要选择那个“非empty”的KDMF,它会生成如下几个文件:2,查看它的“public.h”文件,有如下的GUID定义://// Define原创 2016-04-25 10:59:18 · 10756 阅读 · 0 评论 -
驱动工程中添加新文件后出现的“cannot open source file '***.tmh'"编译错误
在VS2015+WDK10的开发环境下,开发KMDF驱动工程——sample.sln。当我往该工程添加一个”devicecontrol.c“文件后,在该文件中的”#include "devicecontrol.tmh“”语句编译报错:“cannot open source file devicecontrol.tmh”。 我添加文件的方法同普通的VS工程,在“解决方案资源管理器”原创 2016-04-12 11:15:36 · 9224 阅读 · 0 评论 -
如何用程序实现“rescan windows device manager"
本文主要介绍两种”检测硬件设备“的方法,即”rescan windows device manager“。一、调Windows DDK的API实现 先用CM_Locate_DevNode得到设备管理树的根结点,然后用CM_Reenumerate_DevNode以这个根结点为参数刷新它就搞定!在MSDN里面可以查到这两个函数的用法,相关的知识里面也有。(该方法转自点击打开链接,转载 2016-04-28 16:56:28 · 2497 阅读 · 0 评论 -
Windows Driver Samples源码剖析(一) 综述
本系列文章主要剖析Mircrosoft提供的基于WDF框架的“Windows Driver Samples”中的几个Samples,包括:general/echo、general/toaster、general/pcidrv和general/PLX9x5x。而本文主要是作开讲之前的一些介绍,包括:开发环境、下载链接、参考资料和工程简介。一、开发环境OS:win10IDE:VS2原创 2016-05-25 17:31:48 · 2995 阅读 · 0 评论 -
Dump调试之ExceptionCode
Windows下的异常码转载 2016-05-06 10:52:46 · 658 阅读 · 0 评论 -
Windows驱动开发之日志打印
在WDF框架中,有一个“trace.h”头文件,在驱动的入口函数中,会用到 // // Initialize WDF WPP tracing. // WPP_INIT_TRACING( DriverObject, RegistryPath ); // // TraceEvents function is mapped to DoTraceMess原创 2016-04-21 08:58:19 · 9860 阅读 · 0 评论 -
Dump文件生成与分析
参考《Windows驱动开发详解》最后一章,设置dump文件参考博客:点击打开链接转载 2016-04-13 17:23:37 · 1863 阅读 · 0 评论 -
WinDriver打开设备失败“source overlap”
问题描述:新安装的操作系统,插上PCIE设备,并安装WinDriver,打开WinDriver可以发现设备,但打开该设备时,报错“source overlap”。打开其他设备,没有问题。此时,再安装自定义驱动,也有问题。 问题解决:先用WinDriver对该设备生成一个INF文件,然后对该设备安装该INF文件,即可用WinDriver打开该设备。后续,卸载该设备再安装自定义驱动,原创 2016-04-19 19:34:46 · 1751 阅读 · 0 评论 -
win10中“windbg+vmware+win7双机调试”设置
本文主要介绍在win10下如何设置windbg+vmware,以进行双机调试。本文主要参考:李Sir的博客,并浏览了大量网文,以及windbg自带的help文档和MSDN,除了综合各家的经验外,也分享了本人在实践遇到的问题和解决办法。一、安装环境1,主机(Host OS): win10 X642,Windbg:10.0.10586.567 ADM64(本人安装的是wdk10+VS201转载 2016-05-03 16:27:42 · 19702 阅读 · 1 评论 -
PCI Vendor and Device IDs
对于PCI设备,当PC启动并检测到该设备存在时,它首先读取该设备的配置空间,然后根据配置空间中的Vendor ID & Device ID查找相应的驱动程序。 此时,在设备管理器中,右键相应设备,也可以在详细信息中查看到设备的“硬件ID”。 在利用.inf文件安装PCI设备的驱动程序时,.inf文件中应该包含相应的信息,系统将匹配设备配置空间和INF文件中的信息,并写入注册表转载 2016-04-19 09:11:03 · 4258 阅读 · 0 评论 -
《Windows驱动开发技术详解》学习笔记
Abstract 如果推荐 Windows 驱动开发的入门书,我强烈推荐《Windows驱动开发技术详解》。但是由于成书的时间较早,该书中提到的很多工具和环境都已不可用或找不到,而本文搜集了大部分的工具,并在 win10X64 上安装开发环境,在 win7x86 上进行实验,趟过了不少实际编译和测试中遇到的坑。此外,本文也对相关章节的重点进行了总结,全文目录如下:全书导读开发和调试驱...原创 2019-02-13 17:34:19 · 22851 阅读 · 3 评论