![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动开发
文章平均质量分 81
zuishikonghuan
这个作者很懒,什么都没留下…
展开
-
驱动开发(1)基础知识
驱动程序是操作系统和硬件通讯的桥梁,同时,驱动程序可以实现很多特殊功能,比如,虚拟光驱(虚拟设备),内核级hook,文件系统透明加密(过滤驱动),修改Windows内核等等并非所有驱动程序都必须由设备的设计方编写。如果设备根据已发布的硬件标准来设计。这时驱动程序可以由 Microsoft 编写,设备设计者无须提供驱动程序。并非所有的驱动程序都与硬件关联。某些驱动程序与任何硬件设备根原创 2015-10-02 10:51:21 · 3346 阅读 · 0 评论 -
驱动开发(12)内核中的多线程和同步对象
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在内核模式下创建线程在驱动程序中创建线程的方法是调用 PsCreateSystemThread 内核函数,此函数即可以创建系统线程,也可以创建用户线程。此函数的原型如下:NTSTATUS PsCreateSystemThread( _Out_ PHANDLE原创 2016-05-03 09:04:24 · 3256 阅读 · 2 评论 -
驱动开发(11)中断请求级
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/51062287“中断”是一个非常重要的概念,在 80x86 的设备上,Windows 引入了“中断请求级”(IRQL)这一个概念,(在 x86 平台)其中0-2为软件中断,3-31原创 2016-05-02 08:35:44 · 2079 阅读 · 0 评论 -
驱动开发(10)直接I/O和内存描述符表
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/50643005在上篇博文中,我们实现了在驱动程序中处理设备收到读写I/O请求,这个请求我们是使用缓冲I/O处理的。在上一篇中,我已经详细解释了使用缓冲I/O的原因,在这里简原创 2016-03-18 16:52:27 · 2350 阅读 · 0 评论 -
驱动开发(9)处理缓冲I/O设备的读写请求
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/50413094在上面的几篇博文中,介绍了 IRP 与派遣函数,通过例子“磁盘设备的绝对读写”演示了在应用程序中向一个设备发出I/O请求,并实现了驱动程序中处理一个I/O请求——原创 2016-01-03 16:32:16 · 2771 阅读 · 0 评论 -
内核编程之SSDTHook(1)原理
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:说驱动开发这么长时间了,也玩玩内核钩子,钩子(Hook)技术是一种截获对某一对象访问的技术,不仅在Windows平台,Linux平台上也有Hook技术。Hook技术种类繁多,实现细节也不同,还可以灵活使用。我之前写过两篇Ring3下的API Inline Hook的博文,这原创 2016-03-11 14:19:58 · 9018 阅读 · 0 评论 -
内核编程之SSDTHook(3)Hook NtCreateSection监控所有可执行模块加载
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/50924829在上两篇博文中,我介绍了SSDTHook的原理,并给出了一个实例--通过Hook NtOpenProcess来实现进程保护:http://blog.csdn.net/原创 2016-03-18 16:51:54 · 5585 阅读 · 0 评论 -
内核编程之SSDTHook(2)Hook NtOpenProcess实现进程保护
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:上一篇博文“内核编程之SSDTHook(1)原理(地址:)”中,介绍了SSDTHook的原理,这一篇博文,我们来写一个实例,通过Hook NtOpenProcess来的实现进程保护。我之前写过两篇Ring3下的API Inline Hook的博文,这两篇博文通过Inline原创 2016-03-11 14:20:36 · 7413 阅读 · 0 评论 -
驱动开发(8)处理设备I/O控制函数DeviceIoControl
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在上面的两篇博文中,介绍了IRP与派遣函数,以及我们通过了一个例子“磁盘设备的绝对读写”来演示了在应用程序中是如何向一个设备发出I/O请求的。这篇博文将演示在驱动程序中处理一个非常简单的I/O请求——由DeviceIoControl这个Win32API经过一系列的调用,在内核中原创 2016-01-03 16:31:37 · 8501 阅读 · 0 评论 -
[Win32] 直接读写磁盘扇区(磁盘绝对读写)
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:正讲着驱动开发呢,这里突然插一篇Win32的博文,其实,还是做引子,上一篇博文“IRP与派遣函数”中,我们知道了驱动程序需要处理I/O请求,我们先来看看怎么发出一个I/O请求。一般的程序不会直接去访问磁盘,毕竟有文件系统(FileSystem)帮助我们轻松地组织文件,但是有原创 2016-01-03 16:31:00 · 23989 阅读 · 17 评论 -
驱动开发(7)IRP与派遣函数
在上一篇博文中,介绍了NT驱动的基本结构,这几篇博文,博主来说说驱动开发的一个核心内容——如何处理I/O请求。为何要处理I/O请求?因为通常一个驱动程序是为了控制硬件而设计的(虽然没有对应具体硬件的驱动远比有对应具体硬件的驱动要多得多),可以说,是操作系统与硬件通信的桥梁。而I/O操作是控制硬件的基本方法(不考虑对CPU和内存的操作),而驱动程序就是为操作系统提供了一种抽象,驱动程序如原创 2016-01-03 16:30:19 · 2847 阅读 · 0 评论 -
驱动开发(6)NT驱动的基本结构
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/49047055在之前的一篇博文“驱动开发(2)第一个NT驱动和NT驱动的编译”(http://blog.csdn.net/zuishikonghuan/article/detail原创 2015-11-08 13:25:55 · 2535 阅读 · 0 评论 -
驱动开发(4)内核中的内存分配和错误码
在驱动开发中,我们不应该使用C/C++运行时函数中的malloc或者calloc函数分配内存,更不应该使用new关键字,因为内核中的内存分配需要特殊处理。在应用程序中,每个应用都有2G的虚拟内存,因此内存并不紧张,而所有的驱动程序共用内核模式的2G虚拟内存,因此内核中的资源非常宝贵,应该尽量节省。更可怕的是内存泄露,应用程序即使发生了内存泄露,在其结束时操作系统可以通过进程上下文中的虚拟内原创 2015-11-08 12:36:53 · 2515 阅读 · 1 评论 -
驱动开发(5)内核中的字符串
在驱动开发中,内核函数使用的字符串不再是应用程序使用的Win32子系统API和Native API中的char*和wchar_t*,而是内核Unicode字符串UNICODE_STRING。内核字符串有两种,ANSI字符串是ANSI_STRING,Unicode字符串是UNICODE_STRING,他们的结构是这样定义的:原创 2015-11-08 13:23:40 · 2368 阅读 · 0 评论 -
驱动开发(2)第一个NT驱动和NT驱动的编译
在上一篇中,我简单介绍了驱动开发的基础知识,这一篇中,将介绍编写一个NT空壳驱动(驱动基础框架)一、驱动入口驱动程序的入口点是DriverEntry,此函数的原型是:extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath) 参数1:系统发来的驱动对象原创 2015-10-02 10:59:21 · 4552 阅读 · 0 评论 -
驱动开发(3)使用SCM加载NT驱动(用应用程序加载驱动)
在上一篇中,我简单介绍编写了一个NT驱动空壳,这一篇中,将介绍如何自己编写一个驱动程序加载器,即使用编程的方法加载驱动,而不是使用工具。我在上一篇中也提到了,驱动程序是通过服务加载的,我以前写过SCM(服务控制管理器)API的文章,详细介绍各函数的具体用法,详见:[Win32] SCManager 服务控制管理器API(1):http://blog.csdn.net/zuishi原创 2015-10-02 11:02:59 · 2897 阅读 · 0 评论 -
驱动开发(13)IRP 的异步完成和 CancelRoutine
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/51301922在之前的博文中,我们对于IRP,都是同步完成的,但是 Windows 对异步操作很友好,我们来看看如何异步完成 IRP 。在应用程序中异步访问设备在开始之前,我认为有必要提原创 2016-05-03 09:26:53 · 2844 阅读 · 0 评论