WDK编程的一些特殊点
函数的多线程安全性在内核编程中比用户态应用程序的编程更常见。
| 调用源 | 运行环境 | 原因 |
| driverEntry,DriverUnload | 单线程 | 这两个函数由系统进程的单一线程调用,不会出现多线程同时调用 的情况 |
| 各种分发函数 | 多线程 | 分发函数有可能并发,也可能和DriverUnload并发 |
| 完成函数 | 多线程 | 完成函数随时可能被未知的线程调用 |
| 各种NDIS回调函数 | 多线程 | 同上 |
中断级
先简单理解passive级和Dispatch级两种,后者比前者级高,在实际编程中,许多具有比较复杂功能的内核API都要求必须在Passive级执行。
只有比较简单的函数能在Dispatch级执行。调用任何一个内核API之前,必须查看WDK文档,这个内核API的中断级要求。
| 调用源 | 一般的运行中断级 |
| DriverEntry,DriverUnload | Passive |
| 分发函数 | Passive |
| 完成函数 | Dispatch |
| NDIS回调函数 | Dispatch |
WDK中出现的特殊代码
1.参数说明宏,只是说用来说明参数的一些信息,一般都是空宏,最常见的是IN和OUT。定义如下
#define IN
#define OUT
2.指定函数位置的预编译指令
#pragma alloc_text(INIT,DriverEntry)
#pragma alloc_text(PAGE,NdisProtUnload)
这个宏仅仅用用来指定某个函数的可执行代码在编译出来后在sys文件中的位置。
PE的文件结构分成节,不同的节被加载到内在中之后处理情况不同,
INIT节的特点是被初始化完毕之后就被释放。也就不再占用内存空间了。函数DriverEntry可以在这个阶段执行一次,因此这个函数一般用#pragma alloc_text(INIT,DriverEntry)使之位于INIT节。
Page节的特点是位于可以分页交换的内存空间,这些空间在内存紧张时可以被交换到硬盘上以节省内存。
如果未用上述的预编译指令处理,则代码默认位于PAGELK节,加载后位于不可分页交换的内存空间。
需要注意的是,放在PAGE节的函数不可以在Dispatch级调用,因为这种函数的调用可能诱发缺页中断,但是缺页中断不能在Dispatch级完成。
WDK编程的一些特殊点的更多相关文章
- Windows内核安全与驱动开发
这篇是计算机中Windows Mobile/Symbian类的优质预售推荐<Windows内核安全与驱动开发>. 编辑推荐 本书适合计算机安全软件从业人员.计算机相关专业院校学生以及有一定 ...
- 《Windows内核安全与驱动开发》阅读笔记 -- 索引目录
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 一.内核上机指导 二.内核编程环境及其特殊性 2.1 内核编程的环境 2.2 数据类型 2.3 重要的数据结构 2.4 函数调 ...
- windows内核编程之常用数据结构
1.返回状态 绝大部分的内核api返回值都是一个返回状态,也就是一个错误代码.这个类型为NTSTATUS.我们自己写的函数也大部分这样做. NTSTATUS MyFunction() { NTSTAT ...
- (转)Windows驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
- 如何搭建Visual Studio的内核编程开发环境
最近正在看<寒江独钓——Windows内核安全编程>这本书,感觉这本书非常好,有兴趣的朋友可以买来看看,有关这本书的信息请参考:http://www.china-pub.com/19559 ...
- 《天书夜读:从汇编语言到windows内核编程》五 WDM驱动开发环境搭建
(原书)所有内核空间共享,DriverEntery是内核程序入口,在内核程序被加载时,这个函数被调用,加载入的进程为system进程,xp下它的pid是4.内核程序的编写有一定的规则: 不能调用win ...
- 【整理】WDK 和 DDK异同
WDK和DDK的作用 开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发 WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WIND ...
- Windows SDK DDK WDK (Windows Driver Kit) 区别
首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WIN ...
- wdk驱动开发的特点
本文介绍WDK开发的一些特点.与应用层开发的差异性,不能混为一谈. 一.函数的调用点 在内核编程中,一个函数往往有多个调用点,而应用层中一个函数一般只在main里面有调用点.内核函数调用点一般在: 1 ...
随机推荐
- 分享一下学习css,js心得
简化代码,使页面简洁! web前端开发——将界面更好呈现给用户! 要了解在不同浏览器上的兼容情况.渲染原理和存在的bug! 网站性能优化.SEO: 代码的可维护性.性能: 网站重构的本质:建立一个前端 ...
- PHP限制HTML内容中图片必须是本站的方法
本文实例讲述了PHP限制HTML内容中图片必须是本站的方法.分享给大家供大家参考.具体实现方法如下: 1. PHP代码如下: <?php $dom = new DOMDocument; $dom ...
- 【Bootstrap基础学习】00 序
其实这样的东西很多了,但是我就是要写. 我写这种鬼东西只是为了监督自己,如果能顺便帮一下别人就更好了. 这个系列的基础学习,不会去看实体书,主要是去看网上的资料和官网. Bootstrap就是对jQu ...
- YAML初探
http://www.cnblogs.com/chwkai/archive/2009/03/01/249924.html 1 概念YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编 ...
- JPHP试用笔记
JPHP试用指南 编译 环境准备 有JDK 1.6 的环境 Gradle 1.4 以上 具体配置略过,git签出https://github.com/dim-s/jphp/代码后,看readme.md ...
- 几个gcc的扩展功能
-finstrument-functions constructor destructor __builtin_return_address http://linuxgazette.net/15 ...
- 二、SQL语句映射文件(2)增删改查、参数、缓存
//备注:该博客引自:http://limingnihao.iteye.com/blog/106076 2.2 select 一个select 元素非常简单.例如: Xml代码 收藏代码 <!- ...
- web技术人员-推荐书籍
学习是技术人员成长的基础,本次分享20本技术方面的书籍,这些书不是每一本都是经典,但是每一本都有其特点.以下20本大部分本人都看过,因此推荐给大家.(本次推荐的20本只是一个参考,比如像Head Fi ...
- Hibernate中的一级缓存、二级缓存和懒加载(转)
1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...
- vmware linux top si高以及网卡队列、软负载相关优化
今日,测试公司自行开发的一rpc中间件,期间发现top si的比例很高,且几乎只有一个cpu是繁忙的,其他均基本为0. 经查,si主要是系统软中断,最后确定是网卡导致的系统中断.于是,往上搜了下资料, ...