先安装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相关推荐

  1. 构建开发环境 构建demo_构建自己的wotsapp第6部分

    构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...

  2. 构建开发环境 构建demo_构建自己的wotsapp第1部分

    构建开发环境 构建demo I should start this article with a disclaimer: It is based on iOS 13, Swift 5, and Xco ...

  3. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  4. 51单片机仿真开发环境构建实验

    51单片机仿真开发环境构建实验目录 实验目的 一.实验步骤 Step1:之前Debug,USE里面没有Proteus VSM Monitor Driver Step2:把VDM51.dll复制到Pro ...

  5. 嵌入式开发环境构建_设计模式:不可变的嵌入式构建器

    嵌入式开发环境构建 上周,我写了关于什么使图案成为反图案. 本周,我提出一种设计模式-或等待--也许这是一种反模式. 还是? 让我们看看! 当有一个类可以构建另一个实例时,构建器模式是一种编程风格. ...

  6. webpack最新版本_webpack小结-开发环境构建优化

    刚刚对我们前端项目做了一顿分析优化操作,因为接手时每次构建要花两分钟左右的时间,实在忍受不了,只能动手了.通过这次优化,重新温习了下 webpack 的一些知识.接下来会关于 webpack 展开写几 ...

  7. c语言程序构建,c语言开发环境构建及简单的c程序设计.doc

    c语言开发环境构建及简单的c程序设计 实验x C语言开发环境构建及简单的C程序设计 一.实验目的 1.熟悉字符模式下的C程序编译和调试环境,基本掌握麒麟Linux字符模式下的编译工具和调试工具的使用: ...

  8. R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)

    R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下.RStudio开发环境安装) RStudio是R语言的集成开发环境(IDE),它是一个独立的开源项目,它将许多功能强大的编程 ...

  9. 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子    1048272975 1. 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.目前教科书基 ...

最新文章

  1. 【AI】图示:精确度(查准率)Precision、召回率(查全率)Recall
  2. 一代测序+二代测序+三代测序
  3. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
  4. idea设置JVM运行参数
  5. 怎么用计算机杀毒,电脑怎样查杀病毒
  6. Android 标题栏(2)
  7. mysql性能优化 洪斌_洪斌 - MySQL性能诊断与实践
  8. Java - 常用函数Random函数
  9. 一起学Android之Storage
  10. 数学与机器学习的联系
  11. recycleview添加item点击事件--作业三
  12. LeetCode刷题攻略
  13. vue 使用vue-canvas-poster生成自定义海报
  14. linux 绑定腾讯域名解析,一步步配置腾讯云服务器ubuntu 通过域名访问自己的网页tomcat(详细基础)...
  15. ashx获取input file 文件_手机浏览器input type=file标签调用手机拍照+分片上传
  16. oracle备份提示12560,做standby 数据库时,出现ORA-12560 错误:
  17. IME2_AHK输入法自动/智能切换 v1.05
  18. IPv4向IPv6转换的几种技术分析(中科三方)
  19. Revit2016 笔记05
  20. 用友T6-委外的流程

热门文章

  1. Matlab和Python(Numpy,Scipy)与Lapack的关系
  2. SpeedNet: Learning the Speediness in Videos
  3. JVM锁和分布式锁是什么关系
  4. 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化
  5. 配置 html-webpack-plugin 生成预览页面||配置自动打包相关的参数
  6. ES6 模块化的基本语法——默认导出 与 默认导入、按需导出 与 按需导入、直接导入并执行模块代码
  7. mybatis基于注解的入门案例
  8. 计算机组成原理——数据表示、运算与校验1
  9. c++ 用指针将函数作为参数传参
  10. RT-Thread移植到STM32F103ZET6具体操作步骤(利用keil5新建工程,添加RT-Thread源码到工程)