Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Request Level 中断请求级别 Deferred Procedure Calls(DPC) 延迟调用 Asynchronous Procedure Calls(APC) 异步调用 Structured Exception Handling 异常处理 System Crash 系统崩溃 Thread S…
参考资料 https://blog.csdn.net/wdykanq/article/details/7752909 http://blog.51cto.com/laokaddk/404584 内核层创建内存映射用户层 PVOID pShareMM_SYS; PMDL pShareMM_MDL; PVOID pShareMM_User; PKUANGKEEPROCESS vEProcess = KuangKeGetProcessById(3412); KAPC_STATE vKapcState;…
Windows内核开发-3-内核编程基础 这里会深入讲解kernel内核的API.结构体.和一些定义.考察代码在内核驱动中运行的机制.最后把所有知识合在一起写一个有用的驱动. 本章学习要点: 1:通用内核编程指南 2:debug和release版本的区别 3:内核API 4:函数和错误代码 5:字符串 6:动态内存分配 7:内核驱动对象 8:设备对象 1 内核编程注意事项 内核编程依赖于WDK(Windows Driver Kit)Windows驱动工具包,这个东西存放了大量头文件和第三方库.内…
Windows内核开发-4-内核编程基础 这里会构建一个简单但是完整的驱动程序和一个客户端,部署内核执行一些平时user下无法执行的操作. 将通过以下内容进行讲解: 1 介绍 2 驱动初始化 3 Create和Close操作调度实例 4 DeviceIoControl操作调度实例 5 安装和测试驱动程序 整个完整源代码最后面 1 介绍 该驱动将解决Windows API设置线程优先级的不灵活性. 在User模式下,线程的优先级由其进程优先级类和基于每个线程的偏移量组合来确定,偏移量具有有限的级别…
Windows内部概述-2- 线程: 执行代码的实体是线程.一个线程的包含在进程里面的,线程使用进程提供的资源来运行代码. 一个线程拥有以下的内容: 1:明确的运行模式,用户态或者内核态. 2:执行的环境,包括寄存器和执行状态. 3:一个或两个栈空间,用来存放变量和调用管理. 4:Thread Local Storage(TLS) 线程本地存储数组,用来存储线程专用数据和提供统一的访问语法. 5:基本的优先级和当前(动态)的优先级. 6:和处理器关联,用来指示允许线程在那个一个处理器上运行. 线…
Windows内核开发-2-开始内核开发-2- 第一个驱动程序: 直接采用vs2019中的Empty WDM Driver 模块创建: 初始的项目文件夹中有一个Driver Files里面会有一个.inf的文件,没用直接删除就好,然后在源文件里面创建一个.cpp的源文件. DriverEntry和Unload Routines DriverEntry: 每个驱动都有一个入口点,叫做DriverEntry,就好比平常写的C/C++代码里面的main函数.DriverEntry是由一个叫做IRQL_…
Windows内核开发-9-32位和64位的区别 32位的应用程序可以完美再64位的电脑上运行,而32位的内核驱动无法再64位的电脑上运行,或者64位的驱动无法在32位的应用程序上运行.这是为什么呢. 原因是在x64的Windows操作系统上,模拟了x86操作系统的操作,并且引入了一个WOW64子系统,将x86和x64完美进行兼容. WOW64子系统 x86能在x64上运行全靠这个东西.全名叫做Windows On Windows,英文名感觉是在套娃,其实它的意思就是在Windows64上运行W…
Windows内核开发-10-监听对象 Windows内核除了可以监听进程,线程.dll还可以监听特定的对象和注册表.这里先讲一下监听对象. 监听对象 内核提供了一种可以监听对特定的对象类型的句柄进行打开或复制的机制.正式支持的对象类型有进程和线程,Windows10还支持一个桌面对象(桌面对象这个先不考虑). 这个和前面的监听进程线程以及模块加载是有区别的.这个是相对于对象的句柄的,比如说一个进程的句柄,线程的句柄,别的进程通过关闭这个进程的句柄来关闭这个进程这种.是这个意思. 这里也有很多和…
学习了几个月的内核编程,现在对Windows驱动开发又了更加深入的认识,特别是对IRP的分层处理逻辑有了深入认识. 总结起来就几句话: 当irp下来的时候,你要根据实际情况,进行处理 1> 无处理,继续往下传 2> 处理之后 ,往下传 3> 处理之后, 往上传 4> 不做处理,直接丢弃 具体怎么理解,通过一个串口驱动过滤就可以深入理解. 一.串口过滤概念 串口过滤:平时我们看到的主机上的USB.网线口等都属于串口,那么设想一个环境,我去网吧上网,正在通过某宝付款,然后主机后面的US…
Jessica McKellar在Ksplice blog上的博客文章 <Linux Device Drivers> 如果你在写一个操作系统,OSDev wiki是一个不错的网站 Kernel Newbies内核开发新手的资源…