[Windows驱动开发](一)序言

2023-11-17

  笔者学习驱动编程是从两本书入门的。它们分别是《寒江独钓——内核安全编程》和《Windows驱动开发技术详解》。两本书分别从不同的角度介绍了驱动程序的制作方法。


    在我理解,驱动程序可分为两类三种:

    第一类:传统型驱动

        传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分为以下两种:

        1. Nt式驱动:此驱动通过注册系统服务来加载,并且不支持即插即用功能(即没有处理IRP_MJ_PNP这个IRP)。

        2. WDM驱动:此驱动不通过注册系统服务来加载,需啊哟自己编写inf文件。同时,它与NT式驱动相比最大的特点就是支持即插即用功能。

    第二类:微过滤驱动

        微过滤驱动是微软推出的一个驱动框架。它将驱动程序内创建设备对象之类的操作全部封装了,让用户无需理会此部分繁杂的工作。用户只需要针对不同的IRP处理好他们响应的前-后操作还有用户态与内核态的通信即可,即可以理解为微过滤驱动对IRP的处理类似于用户态的API HOOK。


    对于刚开始编写驱动程序的新人来说,使用微过滤驱动是最好不过的了。因为它将大量的内部逻辑进行了封装,我们只需要实现相应的处理逻辑即可。由于笔者先开始看的是《Windows驱动开发技术详解》,所以从第一章的“从两个最简单的驱动谈起”开始接触了传统型驱动的两种形式,从而入门。


    在开始介绍传统型驱动之前,先补充说明一下驱动的编译方式。

    驱动的编译方式有很多种。

    ● 微软官方推荐使用WDK提供的Build Environments来对相应系统编译驱动,此方法需要用户自行创建Source文件编译,对于不熟悉的人略显困难

    ● VS+ddkwizard。ddkwizard插件会在VS中添加一个DDK工程,它可以生成基本的WDM驱动模板,相对来讲会稍微方便些,但是还是需要一些配置。

    ● 直接使用VS编译。对于做惯用户态开发的人来讲,这个是最方便的,目前我用的也是这种方式。它的配置项会相对多一点,但是相信这不是障碍。下面就介绍一下如何配置VS(以VS2005为例)


VS2005配置驱动编译环境方法:

1. 安装WDK,并配置系统环境变量:WDKROOT-D:\WinDDK\7600.16385.1

2. 启动VS2005,在菜单栏“工具”-“选项”内选择“项目和解决方案”-“VC++目录”依次添加所需的目录,具体配置如下图:

注意:$(WDKROOT)\inc\api一定要放在第一个,否则会导致编译失败

3. 具体的项目属性按照如下设置:

注:创建项目时选择“Win32项目”

按照以上图片配置好后就可以直接编译驱动程序了,此配置是XP系统的,其他系统的链接不同的库就可以了。


注:如果在编译过程中遇到如下错误:

error LNK2019: 无法解析的外部符号 @__security_check_cookie@4

请您将“项目属性”-“C/C++”-“代码生成”的“缓冲区安全检查”设为“否”





FROM: http://blog.csdn.net/baggiowangyu/article/details/7786825

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Windows驱动开发](一)序言 的相关文章

  • StreamUtils

    StreamUtils org springframework util StreamUtils 输入 从字节数组到输出流 void copy byte in OutputStream out 从输入流到输出流 int copy Input
  • 刷脸支付不带手机钱包一样可以买单

    今年 移动支付加快脚步 迅速腾飞 其中最受国内外各大企业商户重视的 应该属去年开始投入使用的刷脸支付设备了与扫描二维码等很多移动收款方法 刷脸 支付的应用更为方便 支付的效率更高 安全性更强 无疑速决了很多当前的短处 手机扫码签约免密支付
  • Eclipse打开时出现failed to create the java virtual machine...

    一 问题分析 关于Eclipse出现failed to create the java virtual machine 等情况 1 重装系统之后会发现eclipse很意外的打不开 2 有时候Eclipse使用的时间过长 3 以上情况都会出现
  • vue-router设置默认路由

    git仓库 https github com xiaoli0510 vue router vue使用vue router步骤 1 安装并创建实例 npm install vue router 2 新建router 文件夹和router js
  • libvirt介绍

    libvirt是为了更方便地管理各种Hypervisor而设计的一套虚拟化库 libvirt作为中间适配层 让底层Hypervisor对上层用户空间的管理工具 virsh virt manager 做到完全透明 因为libvirt屏蔽了底层
  • 云原生Java架构师的第一课阿里云部署docker2- (docker实战-安装mysql)

    docker安装成功 后面就只需要去找对应的网站进行镜像下载安装就可以安装任意版本的数据库 而不需要考虑Linux服务器版本和架构 1 拉取 MySQL 镜像 去docker hub 找到mysql镜像 上面有所有的mysql版本和拉取镜像
  • 【网安神器篇】——hydra爆破工具

    作者名 Demo不是emo 主页面链接 主页传送门创作初心 舞台再大 你不上台 永远是观众 没人会关心你努不努力 摔的痛不痛 他们只会看你最后站在什么位置 然后羡慕或鄙夷座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日
  • 用photoshop拼接一个七巧板图案

    转自 https jingyan baidu com article 215817f7a1f6fb1eda1423f8 html 图片处理软件图片市场是一个常见的工具软件 我们在使用时可以自己发掘一些有意思的功能 笔者从旋转拼接角度 以一个
  • 8-3编码器,3-8译码器的verilog实现

    在数字系统中 由于采用二进制运算处理数据 因此通常将信息变成若干位二进制代码 在逻辑电路中 信号都是以高 低电平的形式输出 编码器 实现编码的数字电路 把输入的每个高低电平信号编成一组对应的二进制代码 设计一个输入为8个高电平有效信号 输出
  • 回到十七世纪,让我来编算一本常用对数表(对数结果是小数,要有分数的思想,指数的幂是分数,这样可以实现小数分数转化位整数的幂的求法)

    原文地址 回到十七世纪 让我来编算一本常用对数表作者 小牛 自十八 九岁学习了对数后 就觉得造对数表真不简单 据说十七世纪那时 说如果谁发现了对数表上有一个数字错 就奖一两黄金 据百科百度 纳皮尔 1550 1617年 苏格兰数学家 对数的
  • GBK/GBK2312字库寻址及使用原理

    一 字符编码 1 1 ASCII编码 我们知道 我们所见到的所有字符编码 对于计算机来说都是0 1 更具不同位上的0 1 一个字节 8位 共有256中排列方式 因此一个字节就可以表示256个不同的字符 在这个前提下 ASCII编码就由美国制
  • 因材施教,有道发布“子曰”教育大模型,落地虚拟人口语教练等六大应用

    因材施教的教育宗旨下 大模型浪潮中 网易有道凭借其对教育场景的深入理解和对商业化的理性思考 为行业树立了垂直大模型的典范 7月26日 教育科技公司网易有道举办了 powered by 子曰 教育大模型应用成果发布会 会上重磅推出了国内首个教
  • 游戏与创新

    一 严肃游戏的概念 严肃游戏的出现 最早可以追溯到公元前1400年 当时在古埃及 有一款名为播棋的棋类游戏 这种游戏以植物种子或石子作为道具 在地面或棋盘上 目的是把对方的棋子吃掉 同时 播棋也在日常交易中 被用作计算数量的商业辅助工具 严

随机推荐

  • 5G 速率介绍

    本文就对如何计算最大速率不做介绍 主要介绍的是NSA和SA速率的差别 以及上下行速率的差异 由于5G单用户下行可以到4流 上行可以到2流 而且上下行都支持256QAM 2 6G频率 5ms单周期 配置下 NSA和SA终端下行峰值速率约1 6
  • 用FFmpeg制作WebP动图

    去年写过一篇文章 是教大家用FFmpeg制作GIF动画的 今天在讨论到项目中碰到的一个 apng动画素材引起的程序崩溃时 有位同学建议 我们为啥不用WebP来代替 apng 是啊 why not 网上搜到一篇文章 自己试了一下 发现强大的F
  • SQL Server Management Studio (SSMS) 指定端口Port连接, 用逗号, 例如: localhost,1433

    Microsoft SQL Server Management Studio SSMS 指定端口连接 用 逗号 例如 localhost 1433 localhost 等效 localhost 逗号 1433
  • QT 解决“ qt creator 修改UI后,运行无改变”问题

    只需要将 项目 中的 Shadow build 勾选去掉 重新构建项目 运行即可看到修改后的效果
  • 三、-切换frame&css选择器

    等待元素出现 隐式等待 用WebDriver 对象的implicitly wait方法 这个方法有一个参数 指明等待最长时间 driver implicitly wait 10 显式等待 Selenium里面还有一种称之为显式等待的 可以为
  • Spring的自动装配 byName和byType的区别

    Spring的自动装配 好处 大幅度减少Spring配置 坏处 依赖不能明确管理 可能会有多个bean同时符合注入规则 没有清晰的依赖关系 在装配的时候会有两种方式 byName和byType两种 byName 根据属性名自动装配 此选项将
  • el-checkbox如何同时获得value值和label的值

    在使用el checkbox时有时候需要往后台传送value值 定义的code 和label值 el checkbox组件默认获取的都是label属性中的值 如果label中设置的是code 那如何获取el checkbox的显示文字 la
  • 第一节 初识C语言

    第一节 初识C语言 目录 一 什么是C语言 二 第一个C语言程序 三 数据类型 四 变量与常量 五 字符串 转义字符 注释 六 结构 七 函数 八 数组 九 操作符 十 常见关键字 十一 define定义常量和宏 十二 指针 十三 结构体
  • 通过filebeat、logstash、rsyslog采集nginx日志的几种方式

    由于nginx功能强大 性能突出 越来越多的web应用采用nginx作为http和反向代理的web服务器 而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一 如何有效便捷的采集nginx的日志进行有效的分析成为大
  • postgresql教程

    postgreSQL教程目录 postgreSQL 创建数据库的方式 postgreSQL删除数据库的方式 PostgreSQL 创建表格 postgre删除表格 postgreSQL INSERT INTO 语句 postgreSQL S
  • Android中使用AES加密和解密

    Android中如何使用AES进行加密和解密 作为初入社会的IT行业的大专实习生 只能在公司里被当牛一样每天工作到半夜十二点以后 在这里也是第一次写博客 目的只有两个 1 记录技术实现 尽可能的帮助网友解决困难 2 吐槽公司 不多说了 直接
  • [每日设计] 01、小贱钟,基于STM32的手写机器人

    每日设计 01 小贱钟 基于STM32的手写机器人 原创 starger District 46实验室 3月25日 看厌了圆形的钟表 数字显示又太生硬 相信很多人和我一样 想换一个与众不同的方式看时间 小贱钟就是这样一个有趣的东东 它可以用
  • flask SQLAlchemy-ORM增删改查

    ORM介绍 随着项目越来越大 采用原生SQL的方式在代码中会出现大量的SQL语句 对项目的进展非常不利 SQL语句重复利用率不高 越复杂的SQL语句条件越多 代码越长 会出现很多相近似的SQL语句 很多SQL语句是在业务逻辑中拼出来的 如果
  • 文件ajax上传方式

    直接看代码 1 html table class layui table thead tr td width 20 产品信息 td td 产品信息 td tr thead tbody tr td 产品名称 td td td tr tbody
  • DOM之获取标签元素、属性和属性值

    1 获取标签元素 docunment getElementById id 只能获取一个id标签 docunment getElementByClassName class 获取class标签 结果是一个为数组 不能用forEach docu
  • 【自然语言处理】情感分析(一):基于 NLTK 的 Naive Bayes 实现

    情感分析 一 基于 NLTK 的 Naive Bayes 实现 朴素贝叶斯 Naive Bayes 分类器可以用来确定输入文本属于某一组类别的概率 例如 预测评论是正面的还是负面的 它是 朴素的 它假设文本中的单词是独立的 但在现实的自然人
  • Nginx中root和alias的区别

    root root指定的目录是上级目录 path匹配的整个路径会追加 即root path alias alias指定的目录必须带 path匹配后面的内容会在alias指定的目录下查找 即alias 匹配到path路径后面的部分 例 loc
  • C语言中的static 详细分析

    google了近三页的关于C语言中static的内容 发现可用的信息很少 要么长篇大论不知所云要么在关键之处几个字略过 对于想挖掘底层原理的初学者来说参考性不是很大 所以 我这篇博文博采众家之长 把互联网上的资料整合归类 并亲手编写程序验证
  • 仓鼠与厕鼠

    author skate time 2010 05 28 仓鼠与厕鼠 昨天晚上坐车回家的路上 看见来来往往的人流与车流 行走在高楼之间的马路上 心里当时有个触动 把自己抛离这个画面 站在一个全局的角度看 看似简单的画面 却让人感触很深 行走
  • [Windows驱动开发](一)序言

    笔者学习驱动编程是从两本书入门的 它们分别是 寒江独钓 内核安全编程 和 Windows驱动开发技术详解 两本书分别从不同的角度介绍了驱动程序的制作方法 在我理解 驱动程序可分为两类三种 第一类 传统型驱动 传统型驱动的特点就是所有的IRP