WDK开发环境构建驱动程序入门、Windows驱动程序的Check Build和Free Build
先安装WDK 7;驱动开发包 7;
包含 build环境,调试工具,设备仿真和测试相关;
路径;
DSF一时不知道是什么;
安装过程;
完成;
开始菜单出来两个一级菜单,调试工具,驱动开发包;
看一下构建环境,包含Checked和Free两种;有何区别?
"Checked build" 有 traces和asserts, "Free build" 没有;基本上这两者与我们传统的 "Debug" 和 "Release" 相对应;
chk表示Checked,fre表示Free。主要的区别在于,checked build有traces和asserts,而free build没有。
checked和free是怎么出现的呢?因为传统的用词一般是debug和retail(或者release)。
当Windows NT还处在开发阶段的时候,开发组的人还在用“debug”和“retail”。Debug和Retail的不同在于编译时的选项:
Compiler Optimization:开、关
Debug Traces:开、关
Assertions:开、关
Sanity checks:开、关
传统来说,Debug是“Optimization:关,Traces:开,Assertions:开”,Retail是“O:开,T:关,A:关”。后来,NT团队加入了Sanity checks的选项。本来,Sanity check在内部版本中有,在发布的时候会移除掉。
于是,NT的团队就有了“O:开,T:开,A:开,S:开”,“O:开,T:关,A:关,S:开”和“O:开,T:关,A:关,S:关”三种Build。
最后一种是传统的“retail” build。那么,前两种叫什么build呢?第一种Optimization是开着的,所以不是传统的“debug”,后一种Sanity check是开着的,所以不是传统的“retail”。
为了区别这些build的不同。讨论以后,NT团队决定用“checked”表示“O:开,T:开,A:开,S:开”,“Free”表示“O:开,T:关,A:关,S:开”。Checked是因为所以的check都打开了,Free是因为“check free”。
后来,随着NT 3.1项目进展,团队认识到:
他们其实根本就不会去测试“retail” build,
他们对free build进行了性能测试,结果发现它能够满足性能要求。
于是,团队把free build作为最终版本发布。
进到一个build环境命令提示符;输入 build 命令; 我的本意是看一下 build 命令的帮助;结果一行行提示自己出来,看上去不停地在运行某个程序;原来在安装的一级或二级目录下直接打build命令,会自动构建WDK本身自带的全部驱动程序例子;
先Ctrl-C终止;
做一个入门WDK驱动程序,代码如下;存为test.c;
#include <ntddk.h>
#include <wdf.h>
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;NTSTATUS
DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath
)
{// NTSTATUS variable to record success or failureNTSTATUS status = STATUS_SUCCESS;// Allocate the driver configuration objectWDF_DRIVER_CONFIG config;// Print "Hello World" for DriverEntryKdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n" ));// Initialize the driver configuration object to register the// entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAddWDF_DRIVER_CONFIG_INIT(&config, KmdfHelloWorldEvtDeviceAdd);// Finally, create the driver objectstatus = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE);return status;
}NTSTATUS
KmdfHelloWorldEvtDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit
)
{// We're not using the driver object,// so we need to mark it as unreferencedUNREFERENCED_PARAMETER(Driver);NTSTATUS status;// Allocate the device objectWDFDEVICE hDevice; // Print "Hello World"KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n" ));// Create the device objectstatus = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES,&hDevice);return status;
}
相关参考见此:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf--driver
有关WDK驱动程序构建的参考见
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/tools-for-building-drivers
https://www.baidu.com/link?url=gofQddvm4cFhKAFxAD1iH0_YNCjokCmRwhWT5SEKaaWhbkQPew_4nTGZRiuBBX9bK8r98rY4F-FZuzSfC7o-SPME2VHxHqYizvD8EV7M7Ly&wd=&eqid=a98c2ec5000d4902000000065fef218a
从Checked Build 环境,切换到test.c所在目录,输入build test.c,看一下能否构建出一个test.sys的驱动程序;构建完成,Done;
没有出来.sys为后缀的驱动程序;还不是很清楚这概念,可能到某一版本后,MS的构建应用程序的build和构建驱动程序的build,可能是一个,只是通过不同的参数和环境,来构建出不同的程序类型;
看一下安装目录的下面目录,是一个wmi示例驱动程序;
adm64目录下都是源文件;构建一下此驱动示例,看能否生成.sys驱动;amd64架构的驱动程序,构建成功以后,出现在amd64目录下;如果是构建x86的驱动程序,则.sys出现在i386目录下;
构建wmisamp示例;完毕后显示 Done,wmisamp.sys,1 executable built;
看一下amd64目录下,出来一个.sys驱动程序;
WDK开发环境构建驱动程序入门、Windows驱动程序的Check Build和Free Build相关推荐
- 构建开发环境 构建demo_构建自己的wotsapp第6部分
构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...
- 构建开发环境 构建demo_构建自己的wotsapp第1部分
构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...
- visual studio 2015 搭建python开发环境,python入门到精通[三]
在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...
- 51单片机仿真开发环境构建实验
51单片机仿真开发环境构建实验目录 实验目的 一.实验步骤 Step1:之前Debug,USE里面没有Proteus VSM Monitor Driver Step2:把VDM51.dll复制到Pro ...
- 嵌入式开发环境构建_设计模式:不可变的嵌入式构建器
嵌入式开发环境构建 上周,我写了关于什么使图案成为反图案. 本周,我提出一种设计模式-或等待--也许这是一种反模式. 还是? 让我们看看! 当有一个类可以构建另一个实例时,构建器模式是一种编程风格. ...
- webpack最新版本_webpack小结-开发环境构建优化
刚刚对我们前端项目做了一顿分析优化操作,因为接手时每次构建要花两分钟左右的时间,实在忍受不了,只能动手了.通过这次优化,重新温习了下 webpack 的一些知识.接下来会关于 webpack 展开写几 ...
- c语言程序构建,c语言开发环境构建及简单的c程序设计.doc
c语言开发环境构建及简单的c程序设计 实验x C语言开发环境构建及简单的C程序设计 一.实验目的 1.熟悉字符模式下的C程序编译和调试环境,基本掌握麒麟Linux字符模式下的编译工具和调试工具的使用: ...
- R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)
R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下.RStudio开发环境安装) RStudio是R语言的集成开发环境(IDE),它是一个独立的开源项目,它将许多功能强大的编程 ...
- 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码
51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子 1048272975 1. 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.目前教科书基 ...
最新文章
- 【AI】图示:精确度(查准率)Precision、召回率(查全率)Recall
- 一代测序+二代测序+三代测序
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
- idea设置JVM运行参数
- 怎么用计算机杀毒,电脑怎样查杀病毒
- Android 标题栏(2)
- mysql性能优化 洪斌_洪斌 - MySQL性能诊断与实践
- Java - 常用函数Random函数
- 一起学Android之Storage
- 数学与机器学习的联系
- recycleview添加item点击事件--作业三
- LeetCode刷题攻略
- vue 使用vue-canvas-poster生成自定义海报
- linux 绑定腾讯域名解析,一步步配置腾讯云服务器ubuntu 通过域名访问自己的网页tomcat(详细基础)...
- ashx获取input file 文件_手机浏览器input type=file标签调用手机拍照+分片上传
- oracle备份提示12560,做standby 数据库时,出现ORA-12560 错误:
- IME2_AHK输入法自动/智能切换 v1.05
- IPv4向IPv6转换的几种技术分析(中科三方)
- Revit2016 笔记05
- 用友T6-委外的流程
热门文章
- Matlab和Python(Numpy,Scipy)与Lapack的关系
- SpeedNet: Learning the Speediness in Videos
- JVM锁和分布式锁是什么关系
- 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化
- 配置 html-webpack-plugin 生成预览页面||配置自动打包相关的参数
- ES6 模块化的基本语法——默认导出 与 默认导入、按需导出 与 按需导入、直接导入并执行模块代码
- mybatis基于注解的入门案例
- 计算机组成原理——数据表示、运算与校验1
- c++ 用指针将函数作为参数传参
- RT-Thread移植到STM32F103ZET6具体操作步骤(利用keil5新建工程,添加RT-Thread源码到工程)