
WDF
EmbededCoder
C, Python, C++, Qt, MCU, RTOS, ARM Cortex-M, Linux
展开
-
学习windows驱动
首先,windows驱动是什么?驱动是一个软件,负责承上启下,承上就是与用户程序打交道,提供接口给用户使用;启下就是跟系统内核和硬件打交道,负责读写操作硬件。那么,驱动是怎么实现的?需要掌握哪些概念和知识呢?万丈高楼平地起,说明基础是很重要的,因此,我们首先得从基础开始。在windows系统环境下,驱动的开发依赖于windows系统环境提供的手段。windo...转载 2019-04-23 13:30:53 · 371 阅读 · 0 评论 -
Introduction to Registry Keys for Drivers-windows驱动的注册表位置
问题: 一个内核驱动,在卸载(XxxxCleanup)函数中故意制造了一个致命错误,每次Disable该驱动的时候会引发死机BSoD,现在想卸载这个驱动了,结果杯具了,每次Unstall的时候都会死机,也就是说你无法通过正常方法卸载它了。。。。 方法一:直接在属性中找到驱动位置,去删除它,但是因为文件在使用中,无法删除。。。 方法二:删除该驱动的注册表。内核驱动的注册表位...原创 2019-07-09 14:58:53 · 915 阅读 · 0 评论 -
Automatic Memory Dump
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/automatic-memory-dumpAnAutomatic Memory Dumpcontains the same information as aKernel Memory Dump. The difference between the two...原创 2019-07-09 16:47:47 · 480 阅读 · 0 评论 -
Enabling a Kernel-Mode Dump File
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/enabling-a-kernel-mode-dump-fileDuring a system crash, the Windows crash dump settings determine whether a dump file will be create...转载 2019-07-09 16:48:27 · 223 阅读 · 0 评论 -
windbg 命令笔记
基本命令 元命令 扩展命令g go 运行vertarget 在目标计算机系统上显示 Windows 的版本lm (List Loaded Modules) 命令来显示加载的模块,你可以验证是否正在使用正确的内核模式进程。lm v m tcpip 请求特定模块的详细信息,请使用所示的 v(详细)选项。.dump /ma ...原创 2019-07-05 09:45:02 · 247 阅读 · 0 评论 -
编写内核驱动的应用程序遇到的问题
0、可以一个解决方案下,两个工程,驱动和应用应用程序要包含GUID的头文件Public.h1、头文件及其顺序#include "pch.h"#pragma warning(disable: 4047 4013)#include <DriverSpecs.h>_Analysis_mode_(_Analysis_code_type_user_code_)...原创 2019-07-05 09:51:05 · 345 阅读 · 0 评论 -
WDF 驱动程序echo安装
安装驱动程序的计算机称为***“目标计算机”或“测试计算机”***。通常,此类计算机独立于开发和生成驱动程序包的计算机。详细步骤以管理员身份打开命令提示符窗口。然后,输入以下命令:bcdedit /set TESTSIGNING ON重新启动目标计算机。在目标计算机上为生成的驱动程序包创建文件夹(例如,C:\EchoDriver)。从主计算机上前面描述的生成驱动程序包中复制...原创 2019-07-05 10:46:49 · 420 阅读 · 0 评论 -
WDF驱动简介及几个驱动对象介绍
1.1WDF简述:WDF是微软提出的全新驱动程序模型,它提供了面向对象、事件驱动的驱动程序开发框架,对它的研究是设计高效稳定设备驱动程序的基础。注意理解WDF模型的特点,对象模型,以及基本结构.设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作。设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设计和开发稳定高效的驱动程序...转载 2019-07-24 09:41:44 · 11860 阅读 · 0 评论 -
error C1010 取消预编译头文件pch.h
然后右击pch.h和pch.cpp,直接移除。原创 2019-07-24 13:56:21 · 1259 阅读 · 2 评论 -
Windows驱动开发TraceView之日志打印
《Windows驱动开发技术详解》一书中,介绍了一种“Windows驱动程序日志打印和查看的方法”,具体就是:在需要打印日志的地方,调用“KdPrint”函数,该函数类似标准C的printf(print file)函数。然后用“DebugView.exe”软件查看日志。一、引入事实上,微软也提供了一个日志打印和日志查看机制,它可以查看指定的驱动文件的日志,并根据“Level...转载 2019-07-25 14:58:26 · 2005 阅读 · 0 评论 -
WDF- 用户模式程序和驱动的数据交互
当用户模式的程序调用驱动的时候,怎么传递数据呢?通常用户模式程序和驱动的数据交互有3种办法:buffer方式,direct方式和其他方式。可以看之前我写的WDM驱动模型:http://blog.youkuaiyun.com/zj510/article/details/8212032那么在WDF里面又如何操作呢?我们考虑给WDF驱动增加一个功能:将WRITE请求的数据写入设备对象上下文,然后当READ请...转载 2019-08-05 10:17:39 · 1410 阅读 · 0 评论 -
IRQ, INTERRUPT REQUEST 中断请求级别
Windows有两种中断请求(IRQ, INTERRUPT REQUEST),一种是外部中断,也就是硬件中断,另外一种是软件中断,比如常用的INT 3下个断点。现在的x86计算机基本都是用高级可编程控制器(Advanced Programmable Interrupt Controller, 简称APIC)来控制IRQ。正在运行的线程可以随时被中断打断,进入到中断处理程序。优先级高的中断可以打...转载 2019-08-05 09:45:34 · 2144 阅读 · 0 评论 -
windbg符号路径设置
1、windbg访问符号需要两个文件(SYMSRV.DLL 和 SYMSTORE.EXE),所以添加主path环境变量中它们的路径进去,即:你的windbg安装目录(windbg.exe所在的目录).操作方法:在桌面我的电脑点右键--属性--高级--环境变量,在系统变量列表框中找到path双击,在变量值最后面加一个分号再把你的安装目录写上.点确定. 这一步是告诉windbg那两个文件放在什么...原创 2019-07-09 10:31:37 · 6971 阅读 · 0 评论 -
DbgPrint格式 输出
DbgPrint 输出1) 直接打印字符串。DbgPrint(“Hello World!”);2) 空结尾的字符串,你可以用普通得C语法表示字符串常量char variable_string[] = “Hello World”;DbgPrint(“%s”, variable_string);3) 空结尾的宽字符串(WCHAR类型)WCHAR string_w[] = ...转载 2019-07-03 16:35:04 · 2277 阅读 · 0 评论 -
学习windows驱动(2)
什么是驱动?驱动就是在windows系统中起到承上启下的作用,因为用户程序不能使用系统内核接口,为了使用户程序可以跟硬件交互,可以使用内核功能和内核交互,就需要驱动程序,驱动给用户程序提供接口,使得用户程序可以跟内核和硬件交互。驱动是一个软件,属于内核的一部分,在windows系统起来后,可以加载驱动程序,驱动程序在windows里是*.sys文件形式存在的,程序员开发驱动就是制作...转载 2019-04-23 13:58:29 · 442 阅读 · 0 评论 -
wndows 系统变量
可以用CMD的SET命令来查看现有的系统变量,“="前的部分用%括起来就是。常用:%USERPROFILE%=C:\Users\用户名%SystemRoot%=C:\WINDOWS%SystemDrive%=C:%APPDATA%=C:\Users\用户名\AppData\Roaming%LOCALAPPDATA%=C:\Users\用户名\AppData\Loc...原创 2019-05-27 10:45:12 · 984 阅读 · 0 评论 -
WDF 驱动程序echo安装
1、从GitHub 下载并解压缩 KMDF Echo 示例在此处浏览所有的通用驱动程序示例:https://github.com/Microsoft/Windows-driver-samplesKMDF Echo 示例位于 general 文件夹中。a.对于本实验,我们将以压缩文件的形式下载通用驱动程序示例。https://github.com/Microsoft/Win...原创 2019-06-13 16:17:20 · 1322 阅读 · 2 评论 -
windbg+网线双机调试windows内核驱动
最近要调试bluetooth,涉及到具体硬件因此不能用虚拟机和命名管道调试内核了,另外现在的PC追求轻便化,因此连串口都没了,不得不考虑使用网线调试。网上转了一圈发现了这篇:基于网络的内核调试 驱动调试需要用到两台机器,目前主要是通过串口、usb或者1394接口来连接。对于软设备驱动来说就多了一种选择,通过vmware等虚拟化软件来虚拟测试机。但有些情况下必须在真实的双机环境进行,如真...原创 2019-06-19 16:24:31 · 2939 阅读 · 1 评论 -
OutputDebugString 格式化输出函数 OutputDebugPrintf
OutputDebugString属于windowsAPI的,所以只要是包含了window.h这个头文件后就可以使用了。可以把调试信息输出到编译器的输出窗口,还可以用DbgView(本机或TCP远程)这样的工具查看,这样就可以脱离编译器了。OutputDebugString 默认只能输入一个参数,不能像printf那样格式化输出,下面改造成类似printf函数的输出方式。#in...原创 2019-06-20 11:29:05 · 21483 阅读 · 0 评论 -
DbgView工具&远程调试
1. DebugView:DebugView is an application that lets you monitor debug output on your local system, or any computer on the network that you can reach via TCP/IP. It is capable of displaying both kernel...原创 2019-06-20 12:03:18 · 4636 阅读 · 0 评论 -
Dbgview,本机内核打印的注册表配置
Dbgview本机调试windows驱动,无法接收内核驱动的log,但是可以输出win32应用程序的log。在网上搜索了有关的配置信息,归结为两种方法:方法一、打开注册表手动修改键值1. 打开注册表:(在Run中输入regedit);2. 在HKLM\SYSTEM\CuurentControlSet\Control\Session Manager下新建一个名称为Debug Prin...转载 2019-06-20 14:02:00 · 1620 阅读 · 0 评论 -
Windbg串口联调
使用Windbg进行目标机的内核驱动调试时,可以使用的连接方式有USB、网络、串口等。串口调试的连接方法一、目标机的设置bcdedit /set {default} DEBUG YESbcdedit /debug onbcdedit /dbgsettings serial debugport:X baudrate:115200a. 以下是Windbg的帮助文档中给出的设...原创 2019-06-20 16:45:43 · 944 阅读 · 4 评论 -
使用USB 3.0进行windbg调试
1. 名词约定目标机(target):被调试机器主机(host):运行调试工具(windbg)的机器2. 系统要求1> USB 3.0调试线特殊定制的USB 3.0 AM-AM线缆,淘宝可以直接买到,链接: https://shop129099241.taobao.com2> 操作系统Windows 8 或 Windows Server 2012以上版本(主机,目标...原创 2019-06-25 14:59:15 · 1368 阅读 · 0 评论 -
WPP Software Tracing
1、如果新建工程时没有使能WPP,则在工程属性中的 Wpp Tracing->General->Run Wpp Tracing->Yes;Wpp Tracing->File Options->Scan ConfigurationData->Trace.h; 然后复制Trace.h文件到工程目录下。2、打开Trace.h, 修改#define WPP_C...原创 2019-07-02 09:37:12 · 2610 阅读 · 2 评论 -
程序又“死”了,但是还好我转储了dump!
作为开发人员,遇到最多的可能就是程序中的各种bug,然后根据bug的描述去复现、调试、修改。当所遇到的bug能够被稳定复现的时候,那么修改起来相对来说会容易许多,至少你知道是哪里出了问题,这个bug是怎么样的。但是有时候我们的程序会偶然的出现一些异常情况,比如突然卡死无响应了、运行时出错了、闪退了等等。那么这个时候,我们就很难去复现当时的场景,就需要借助一些日志或者错误报告等手段来进行分析。...转载 2019-07-08 16:19:04 · 1200 阅读 · 0 评论 -
DeviceIoControl
应用程序和驱动程序的通信过程是:应用程序使用CreateFile函数打开设备,然后用DeviceIoControl与驱动程序进行通信,包括读和写两种操作。还可以用ReadFile读数据用WriteFile写数据。操作完毕时用CloseHandle关闭设备。我们比较常用的就是用DeviceIoControl对设备进行读写操作。先看看DeviceIoControl是怎么定义的:BOOL Devi...转载 2019-08-01 13:48:22 · 1299 阅读 · 0 评论