驱动开发
大招至胜
完美主义者+细节强迫症
展开
-
Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验)
自己在研究驱动开发,第一步就是开发环境的搭建,网上已有很多的教程一,我也是按着教程一步一步搭建的,但在搭建过程的过程当中遇到一些问题,也花了我不少时间。第一个难题就是,我是Windows7+VS2010+WDK的开发环境。首先我参考了网上的一篇文章:http://www.原创 2011-08-12 23:30:24 · 35808 阅读 · 13 评论 -
菜鸟学驱动开发系列
我是一个菜鸟,最近开始学习驱动,随便把所学的知识做一份记录,因为记性实在是不太好,方便以后查询,更方便与大家一起学习进步。VS2010驱动开发环境搭建菜鸟之驱动开发1-一个最简单的驱动菜鸟之驱动开发2-添加驱动设备并创建派遣函数菜鸟之驱动开发3-读取SSDT菜鸟之驱动开发4-修改SSDT菜鸟之驱动开发5-应用层加载与卸载驱动菜鸟之驱动开发6-注册表加原创 2011-08-19 16:26:46 · 2660 阅读 · 1 评论 -
菜鸟之驱动开发11
在本节中,我们将学习驱动层的内存管理,介绍内存管理中常用的API,并与应用层内管理API相对应。内核中常用的内存管理API与应用层内存管理API对应关系如下: 内核API应用层C API说明Rtl原创 2011-08-28 13:44:31 · 2429 阅读 · 0 评论 -
菜鸟之驱动开发13
在本节,我们将学习在内核模式下操作文件,包括:创建,打开,读取,修改,文件属性读取与修改。相关的API有:ZwCreateFile, ZwOpenFile, ZwReadFile, ZwWriteFile, ZwQueryInformationFile,ZwSetInform原创 2011-08-28 23:22:30 · 2925 阅读 · 2 评论 -
菜鸟之驱动开发12
在本节中,我们学习在驱动中如何操作双向链表:链表的创建,初始化,遍历,删除。驱动中有自己的链表接构,也有相专用的操作链表函数,也可以用C/C++中自已实现的链表。驱动中的链表接构是:LIST_ENTRY操作链表的主要API有:InitializeListHead原创 2011-08-28 15:18:00 · 1872 阅读 · 0 评论 -
菜鸟之驱动开发10
在第10节里,我们要写一个ssdt hook功能的应用程序,因为是应用程序没有SSDT HOOK的能力,所以我们要写一个具有HOOK能力的驱动,然后应用程序发命令到驱动完成功能。 其实是以前学习的总结:1.SSDT修改, 2.应用程序与驱动通信。这一节开始,我将用VS2010原创 2011-08-28 10:37:54 · 1520 阅读 · 0 评论 -
菜鸟之驱动开发9
在上两节,我们分别介绍了驱动与应用程序通信的缓冲区与直接访问模式,今天介绍第三种方式。我们在上一节的代码上做修改即可。首先修改ctl_code.h为#ifndef CTL_CODE#pragma message("\n \n-----------EXEģʽ . In原创 2011-08-23 23:08:14 · 9814 阅读 · 0 评论 -
菜鸟之驱动开发8
在上一节中我们学习了驱动与应用程序的缓冲区模式的通信,这一节我们学习它们之间的直接模式通信。只是方式不一样,但实现的目的是一样的,即驱动与应用程序的通信。我们在上一节代码的基础上做一些修改就可以了。首先修改ctl_code.h代码如下:/*#ifndef CTL_COD原创 2011-08-21 22:04:16 · 1984 阅读 · 0 评论 -
菜鸟之驱动开发7
驱动是RING0的程序代码,我们Ring3代的程序如果想控制ring0级的功能,那么就需要学会ring0与ring3之间的通信。今天就开始学习驱动与应用程序之间的通信。我们需要在驱动产现一个加法运算,然后我们在应用程序将两个运算数传入到驱动层,由驱动层计算了结果返回给应用程。原创 2011-08-21 20:49:31 · 1587 阅读 · 0 评论 -
菜鸟之驱动开发6
在第5节,我们学习了如何用程序的方法在应用层加载驱动。今天将学习如何修改注册表的方式加载驱动,这种方式需要重启电脑才能看到效果。首先我们新建一个以.reg为后缀的文本文件。然后编辑以下内容:Windows Registry Editor Version 5.00[原创 2011-08-19 21:10:17 · 1642 阅读 · 0 评论 -
菜鸟之驱动开发4
在上一节,我们学到了如何读取SSDT表中函数的当前地址与系统地址, 有了这两个地址我们就可以判断该函数是否被inline hook了, 如果NSOpenProcess被hook了,那么我们就无法用od对进程进行载入,从而不能分析之。今天教大家如何绕过它,从而使其可以被od载入,从原创 2011-08-18 00:20:14 · 1949 阅读 · 0 评论 -
菜鸟之驱动开发5
在前面4节中,我们学习了一个驱动的基本写法,也算是驱动已入门了。今天要介绍的就是在应用层加载与卸载驱动,有两种方法:1.修改注册表,2.用SCM-Service Control Manager管理驱动。我们今天学习第二种方法,主要学习如何加载驱动与卸载驱动。我用的是VS201原创 2011-08-18 23:22:37 · 2422 阅读 · 1 评论 -
菜鸟之驱动开发3
今天我们接上第二课继续加新功能:读取SSDT。 什么是ssdt? 我不作过多解释,因为我解释不清楚,GOOGLE一下有大把的资料,向大家介绍一篇好文章:http://blog.titilima.com/ssdt.html。我的理解就是建立ring0与ring3的映射关系。 操作原创 2011-08-16 20:17:32 · 2060 阅读 · 1 评论 -
菜鸟之驱动开发2
在上一篇文章里我们写了第一个驱动程序-HelloWorld, 今天我们来完善它,主要完成两个功能:添加一个驱动设备与给驱动添加默认派遣(IRP)。首先我们来完成第一个功能:添加一个驱动设备。代码如下: NTSTATUS CreateTheDevice(IN PDR原创 2011-08-15 21:40:45 · 2463 阅读 · 0 评论 -
菜鸟之驱动开发1
在之前一篇文章里介绍驱动开发环境搭建过程,现在就开始写驱动了。我是照着郁金香的视频教程学习驱动开发的。那驱动有些课时比较多余,我在学习的过程当中会终合考虑合并一些课时。今天这一课是学着写一个驱动的helloworld,并用WDK环境编译成sys文件。为了对驱动开发有一个更深入的了原创 2011-08-14 22:30:02 · 4207 阅读 · 1 评论 -
Swift中懒加载
关键字是lazy, 只能是var的变量才能懒加载lazy var count = 100lazy var count = { return 100}()//闭包中如果是多行代码就要报错:unable to infer complex closure return typelazy var count = { var a = 100 var b = 100 retu原创 2017-09-07 18:15:43 · 1182 阅读 · 0 评论