随笔分类 - 驱动
摘要:直接从win95/98说起,因为之前的系统基本上没有保护模式的概念,程序员可以直接修改任意内存的数据。在95/98中采用的内核开发模型是VxD(虚拟设备驱动),在dos时期,程序认为它们拥有系统的一切,严格来说95/98是建立在dos的基础上的操作系统,当dos程序移植到 windows中,wind...
阅读全文
摘要:1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。 2.DDK(Driver Develo...
阅读全文
摘要:现在的网络安全问题,越来越受到重视,微软在VISTA以后,使用了WFP平台来代替之前XP和03中的基于包过滤的技术,比如Transport Driver Interface(TDI)过滤,Network Driver Interface Specification(NDIS)过滤,Winsock l...
阅读全文
摘要:Windows 8是微软公司推出的最新的客户端OS,内部名称Windows NT 80。相对于Windows NT 5.x,其网络结构变化非常大,原有的TDI,NDIS系统挂接方法不再适用。在Windows8系统中,微软引入了两种新的网络过滤系统,WFP和NDISfilter。WFP (Window...
阅读全文
摘要:typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer;} UNICODE_STRING;typedef UNICODE_STRING *PUNICODE_STRING;...
阅读全文
摘要:在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存。两种最容易的技术是:l应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存。(应用程序分配共享内存)l由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序。...
阅读全文
摘要:驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。驱动层和应用层通信,主要是靠DeviceIoControl函数,下面是该函数的原型:BOOLDeviceIoControl(HANDLEhDevice,//设备...
阅读全文
摘要:1. 概述从 windows xp 和 windows 2003 开始使用了快速切入内核的方式提供系统服务例程的调用。KiFastCallEntry() 的实现是直接使用汇编语言,C 语言不能直接表达某些操作。我从 windows 2003 里反汇编出来,写成 C 伪码形式,点击这里察看:KiFas...
阅读全文
摘要:1. 概述windows 提供了一种基于 lookaside list 的快速内存分配方案,区别于一般的使用 ExAllocatePoolWithTag() 系列函数的内存分配方式。每次从 lookaside list 里分配 fixed size 的内存。 系统构建两个条 lookaside 链表...
阅读全文
摘要:1.检查内存可用性在驱动程序开发中,对内存的操作要格外小心。如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃。DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的情况下,试探这段内存的可读写性。VOIDProbeForRead(INCONSTVOID*Address,INSIZ...
阅读全文
摘要:1.Lookaside结构频繁的申请和回收内存,会导致在内存上产生大量的内存“空洞”,从而导致最终无法申请内存。DDK为程序员提供了Lookaside结构来解决这个问题。我们可以将Lookaside对象看成是一个内存容器。在初始化的时候,它先向Windows申请了一块比较大的内存。以后程序员每次申请...
阅读全文
摘要:1.分配内核内存Windows驱动程序使用的内存资源非常珍贵,分配内存时要尽量节约。和应用程序一样,局部变量是存放在栈空间中的。但栈空间不会像应用程序那么大,所以驱动程序不适合递归调用或者局部变量是大型数据结构。如果需要大型数据结构,我们可以在堆中申请。堆中申请的函数有以下几个:(1)PVOIDEx...
阅读全文
摘要:声明:本文所描述的所有资料和源码均搜集自互联网,版权归原始作者所有,所以在引用资料时我尽量注明原始作者和出处;本文所搜集资料也仅供同学们学习之用,由于用作其他用途引起的责任纠纷,本人不负任何责任。(本资料由代码疯子整理)一、书籍推荐《Windows驱动开发技术详解》作者:张帆、史彩成;出版社:电子工...
阅读全文
摘要:重载内核内容:1、将内核文件加载到内存2、进行基址重定位3、重定位ssdt结构4、HookKiFastCallEntry,让RING3进程调用走新内核下面一步一步的进行分析1、加载内核文件我们要加载哪一个文件呢?答案是:ntkrnlpa.exe,我测试的系统的XPsp3,该文件所在目录为C:\WIN...
阅读全文
摘要:A盾的原理是在驱动加载时重载os内核,获取原始ssdt表的地址。应用层点击查询的代码在文件A-ProtectView.cpp中,每种点击操作调用相应的query查询函数,在query函数里ReadFile。读操作的Handle是A盾自定义的操作码,类似DeviceIoControl的控制码,比如ha...
阅读全文
摘要:本帖最后由 shulun743 于 2014-1-24 12:27 编辑主要说32位系统:挂钩方式,现在常用的就是挂钩ssdt,shadown ssdt,inline hook挂钩文件系统过滤驱动和HOOK NT!KiFastCallEntry!不具体讨论HOOK和INLINE HOOK的区别了!就...
阅读全文
摘要:在Windows内核中有一个活动进程链表AcvtivePeorecssList。它是一个双向链表,保存着系统中所有进程的EPROCESS结构。特别地,进程的EPROCESS结构包含一个具有指针成员FLINK和BLINK的LIST_ENTRY结构,这两个指针分别指向当前进程的前方和后方进程。当某些模块...
阅读全文
摘要:本来按照这个来做,能跑通helloworld,可是复杂的驱动就会出错....不知道什么原因,后来就直接用命令行来编译的。------------------------------------------------------------------------------------------...
阅读全文
摘要:对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向只读页面执行写操作;当该位复位时则反之。因此,在写前把设置该位就可以climov eax, cr0and eax, -65537 ...
阅读全文
摘要:SSDT即System Service Dispath Table,它是一个表,这个表中有内核调用的函数地址。KeServiceDescriptorTable:是由内核(Ntoskrnl.exe)导出的一个表,这个表是访问SSDT的关键,具体结构是typedef struct ServiceDesc...
阅读全文

浙公网安备 33010602011771号