windows底层
cshcmqcsh
这个作者很懒,什么都没留下…
展开
-
伪句柄分析
>6.8节中提到了一个线程“伪句柄“概念,同时指出线程的伪句柄是当前线程的句柄,也就是调用函数的线程的句柄。 感觉单从概念上还不能充分的理解,必须深入分析。Windows就是隐藏了太多的东西,你越不分析透,就越不能理解,内心就越不踏实。 显然,GetCurrentThread()返回的是一个伪句柄,那就从它开始。 通过实验,发现不管如何调用,GetCurrentThread()返回的伪句柄都是一个固定值0xfffffffe(-2),这显然不是一个有效句柄(地址)。其实,GetCurrentThread原创 2011-05-17 17:09:00 · 798 阅读 · 1 评论 -
DriverObject与DeviceObject关系
二者是一个不太严格的双向链表关系:1、DriverObject--------------->DeviceObject1------------------>DeviceObject2-->....DeviceObjectN-->NULL (DriverObject.DeviceObject域) (DeviceObject.NextDevice域)2、DeviceObject----------->DriverObject (DeviceObj原创 2011-05-26 20:53:00 · 1124 阅读 · 0 评论 -
遍历驱动
_driver_object成员DriverSection指向_ldr_data_table_entry,_ldr_data_table_entry储存了某一驱动的基址、文件名等信息。_ldr_data_table_entry 成员 InLoadOrderLinks 为一 _list_entry结构,储存了前、后_ldr_data_table_entry的地址,_ldr_data_table_entry通过此成员形成一双向链表。而系统所有已装入驱动都在这链表中有一结点。故遍历之,即可达到目的。原创 2011-05-30 20:50:00 · 702 阅读 · 0 评论 -
驱动程序栈、设备栈、IRP
首先建交驱动分层的概念。一个物理设备的驱动(不限于物理设备),通常由几个驱动程序分层的共同完成。每层一个设备对象,他们联系在一起,组成一个设备栈。当然,每层的设备对应一个驱动程序,也组成一个驱动程序栈。二者是平行联系的关系。一个设备栈上的设备对象,从上自下,联系在一起。从下自上,也联系在一起。 设备栈上的设备对象,从上自下,通过 DEVICE_OBJECT 的 DEVOBJ_EXTENSION 的 +18 struct _DEVICE_OBJECT .AttachedTo 联系在一起。原创 2011-05-28 17:25:00 · 1671 阅读 · 0 评论 -
遍历进程
_eprocess成员ActiveProcessLinks _list_entry 类型,指向前、后eprocess.ActiveProcessLinks成员,而非eprocess开头。通过它,可以遍历系统所有进程。原创 2011-05-30 20:53:00 · 360 阅读 · 0 评论 -
_EPROCESS 一些成员说明
<br />ActiveProcessLinks_list_entry 类型,指向前、后eprocess.ActiveProcessLinks成员,而非eprocess开头。通过它,可以遍历系统所有进程。<br />原创 2011-05-30 20:35:00 · 412 阅读 · 0 评论 -
driver_object结构几个域的说明
<br />首先明确映像、文件两个概念的差别。<br /> <br />DriverStart驱动映像的基址('mz'开头)<br />DriverSize驱动映像的大小<br /> <br />有了这两个东西就可计算得一个驱动在内存中的二进制实体。<br /> <br />DriverSection指向_ldr_data_table_entry(此结构另论)<br /> <br />DriverInit驱动映像的入口地址(DriverEntry)原创 2011-05-28 09:26:00 · 412 阅读 · 0 评论