
Windows驱动开发
TYW----子曰小玖
人生最重要的不是所在的位置,而是所朝的方向。
展开
-
驱动开发(1)基础知识
http://blog.csdn.net/zuishikonghuan/article/details/48545623驱动程序是操作系统和硬件通讯的桥梁,同时,驱动程序可以实现很多特殊功能,比如,虚拟光驱(虚拟设备),内核级hook,文件系统透明加密(过滤驱动),修改Windows内核等等并非所有驱动程序都必须由设备的设计方编写。如果设备根据已发布的硬件标准来设计。这时驱动程序可以由 Mic...转载 2019-07-05 10:25:27 · 1351 阅读 · 0 评论 -
驱动开发(12)内核中的多线程和同步对象
http://blog.csdn.net/zuishikonghuan/article/details/51301896在内核模式下创建线程在驱动程序中创建线程的方法是调用 PsCreateSystemThread 内核函数,此函数即可以创建系统线程,也可以创建用户线程。此函数的原型如下:NTSTATUS PsCreateSystemThread( _Out_ PHAND...转载 2019-07-08 09:32:15 · 423 阅读 · 0 评论 -
驱动开发(11)中断请求级
http://blog.csdn.net/zuishikonghuan/article/details/51062287“中断”是一个非常重要的概念,在 80x86 的设备上,Windows 引入了“中断请求级”(IRQL)这一个概念,(在 x86 平台)其中0-2为软件中断,3-31为硬件中断。其中,软件中断从低到高(0,1,2)分别为: IRQL PASSIVE_LEVEL、IRQL AP...转载 2019-07-08 09:32:07 · 487 阅读 · 0 评论 -
驱动开发(10)直接I/O和内存描述符表
http://blog.csdn.net/zuishikonghuan/article/details/50643005在上篇博文中,我们实现了在驱动程序中处理设备收到读写I/O请求,这个请求我们是使用缓冲I/O处理的。在上一篇中,我已经详细解释了使用缓冲I/O的原因,在这里简单重复一下,如果要看详细解释请看上一篇博文。当我们调用ReadFile(Ex)和WriteFile(Ex)读写...转载 2019-07-08 09:31:54 · 284 阅读 · 0 评论 -
驱动开发(9)处理缓冲I/O设备的读写请求
http://blog.csdn.net/zuishikonghuan/article/details/50413094在上面的几篇博文中,介绍了 IRP 与派遣函数,通过例子“磁盘设备的绝对读写”演示了在应用程序中向一个设备发出I/O请求,并实现了驱动程序中处理一个I/O请求——由 DeviceIoControl 这个 Win32API 经过一系列调用,在内核中生成的 IRP_MJ_DEVI...转载 2019-07-05 10:54:01 · 577 阅读 · 0 评论 -
驱动开发(8)处理设备I/O控制函数DeviceIoControl
http://blog.csdn.net/zuishikonghuan/article/details/50380577在上面的两篇博文中,介绍了IRP与派遣函数,以及我们通过了一个例子“磁盘设备的绝对读写”来演示了在应用程序中是如何向一个设备发出I/O请求的。这篇博文将演示在驱动程序中处理一个非常简单的I/O请求——由DeviceIoControl这个Win32API经过一系列的调用,在内核...转载 2019-07-05 10:50:20 · 1092 阅读 · 0 评论 -
驱动开发(7 续)直接读写磁盘扇区(磁盘绝对读写)
http://blog.csdn.net/zuishikonghuan/article/details/50380313正讲着驱动开发呢,这里突然插一篇Win32的博文,其实,还是做引子,上一篇博文“IRP与派遣函数”中,我们知道了驱动程序需要处理I/O请求,我们先来看看怎么发出一个I/O请求。一般的程序不会直接去访问磁盘,毕竟有文件系统(FileSystem)帮助我们轻松地组织文件,但是...转载 2019-07-05 10:48:15 · 2209 阅读 · 2 评论 -
驱动开发(7)IRP与派遣函数
http://blog.csdn.net/zuishikonghuan/article/details/50190339在上一篇博文中,介绍了NT驱动的基本结构,这几篇博文,博主来说说驱动开发的一个核心内容——如何处理I/O请求。为何要处理I/O请求?因为通常一个驱动程序是为了控制硬件而设计的(虽然没有对应具体硬件的驱动远比有对应具体硬件的驱动要多得多),可以说,是操作系统与硬件通信的...转载 2019-07-05 10:46:29 · 473 阅读 · 0 评论 -
驱动开发(6)NT驱动的基本结构
http://blog.csdn.net/zuishikonghuan/article/details/49047055在之前的一篇博文“驱动开发(2)第一个NT驱动和NT驱动的编译”(http://blog.csdn.net/zuishikonghuan/article/details/48805945)中,给出了一个空壳驱动,下面,将会以此源码为基础进行扩充,并给大家解说一下NT驱动的基本...转载 2019-07-05 10:44:49 · 507 阅读 · 0 评论 -
驱动开发(5)内核中的字符串
http://blog.csdn.net/zuishikonghuan/article/details/49717715在驱动开发中,内核函数使用的字符串不再是应用程序使用的Win32子系统API和Native API中的char*和wchar_t*,而是内核Unicode字符串UNICODE_STRING。内核字符串有两种,ANSI字符串是ANSI_STRING,Unicode字符串是U...转载 2019-07-05 10:41:12 · 456 阅读 · 0 评论 -
驱动开发(4)内核中的内存分配和错误码
http://blog.csdn.net/zuishikonghuan/article/details/49717679在驱动开发中,我们不应该使用C/C++运行时函数中的malloc或者calloc函数分配内存,更不应该使用new关键字,因为内核中的内存分配需要特殊处理。在应用程序中,每个应用都有2G的虚拟内存,因此内存并不紧张,而所有的驱动程序共用内核模式的2G虚拟内存,因此内核中的资...转载 2019-07-05 10:39:03 · 308 阅读 · 0 评论 -
驱动开发(3)使用SCM加载NT驱动(用应用程序加载驱动)
http://blog.csdn.net/zuishikonghuan/article/details/48827825在上一篇中,我简单介绍编写了一个NT驱动空壳,这一篇中,将介绍如何自己编写一个驱动程序加载器,即使用编程的方法加载驱动,而不是使用工具。我在上一篇中也提到了,驱动程序是通过服务加载的,我以前写过SCM(服务控制管理器)API的文章,详细介绍各函数的具体用法,详见:[...转载 2019-07-05 10:37:21 · 492 阅读 · 0 评论 -
驱动开发(2)第一个NT驱动和NT驱动的编译
http://blog.csdn.net/zuishikonghuan/article/details/48805945在上一篇中,我简单介绍了驱动开发的基础知识,这一篇中,将介绍编写一个NT空壳驱动(驱动基础框架)一、驱动入口驱动程序的入口点是DriverEntry,此函数的原型是:extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT p...转载 2019-07-05 10:30:05 · 610 阅读 · 0 评论 -
驱动开发(13)IRP 的异步完成和 CancelRoutine
https://blog.csdn.net/zuishikonghuan/article/details/51301922在之前的博文中,我们对于IRP,都是同步完成的,但是 Windows 对异步操作很友好,我们来看看如何异步完成 IRP 。在应用程序中异步访问设备在开始之前,我认为有必要提一句异步访问设备。在之前的博文中,与驱动通信的代码都是采用同步访问设备的,其实所谓同步访问,是...转载 2019-07-08 09:32:25 · 758 阅读 · 0 评论