
白话系列(事实解读名词)
文章平均质量分 72
UnMovedMover
windows内核 C++ C Assembly
展开
-
C++多重继承类内存布局
多重继承 内存布局1 继承的基类(带虚表的)有几个,派生类就有几张虚表2 内存布局按照继承顺序3 派生类新增的虚函数在第一个虚表里class Base0{public: int a0;};class Base1:public Base0{public: int a1; virtual void f1(){ }};class Base2{public: int a2; virtual void f2(){}};class原创 2021-02-24 14:06:21 · 588 阅读 · 0 评论 -
白话IoSetCompletionRoutine
IoCopyCurrentIrpStackLocationToNext IoSetCompletionRoutine IoCallDriver 这三个函数一般关联在一起,到底做了什么呢? 先看 IoCopyCurrentIrpStackLocationToNext FORCEINLINEVOIDIoCopyCurrentIrpStackLocation原创 2015-01-05 23:03:31 · 812 阅读 · 0 评论 -
白话IoSkipCurrentIrpStackLocation
我们在IRP的Passthrough例程中会这样处理放过的IRP IoSkipCurrentIrpStackLocation( Irp );return IoCallDriver( ...->AttachedToDeviceObject, Irp );那么这两个函数内在本质是什么呢?WDK的wdm.h 中有关于 IoSkipCurrentIrpS原创 2015-01-05 16:27:27 · 895 阅读 · 0 评论 -
FSRTL_COMMON_FCB_HEADER
我们可以看到 AllocateSize是在硬盘上实际申请的大小, FileSize 是呈现给用户的文件大小,ValidDataLength是FileSize下实际有效的长度。文件右击属性,会看见 大小 和 占用空间 。 大小对应的就是FileSize, 占用空间就是AllocateSize。原创 2015-01-20 11:39:52 · 1119 阅读 · 0 评论 -
IoCreateStreamFileObjectLite和IoCreateStreamFileObject
我们首先看见的差别在于 Routine Description, IoCreateStreamFileObjectLite比IoCreateStreamFileObjectEx多了一段描述This call(IoCreateStreamFileObjectLite) differs from IoCreateStreamFileObject in that it performs nohandle management and does not result in a call to the file原创 2015-01-21 10:20:45 · 1181 阅读 · 0 评论 -
白话VPB(volume parameter block)
为什么要绑定FS的CDO设备?楚狂人在《Windows文件系统过滤驱动开发教程(第二版)》中写道:“一个新的存储媒质被系统发现并在文件系统中生成一个Volume的过程称为Mounting.其过程开始的时候,FS的CDO将得到一个IRP,其Major Function Code为IRP_MJ_FILE_SYSTEM_CONTROL,Minor Function Code为IRP_MN_MOU原创 2014-12-31 13:54:34 · 1210 阅读 · 1 评论 -
白话DeviceIoControl
调用的方法之一的DeviceIoControl 驱动层提供设备名 例如filedisk 在驱动层 首先先是注册列表用winObj查看 filedisk的驱动对象但是 这八个对象时怎么生成的呢?我们在加载filedisk.sys驱动时进行中断 查看过程 具体的双击调试 看我的另一篇文章 http://www.cnblogs.com/UnMovedMov原创 2014-12-31 17:15:58 · 577 阅读 · 0 评论 -
win7(64)位下WinDbg64调试VMware10下的win7(32位)
win7(64)位下WinDbg64调试VMware10下的win7(32位)一 Windbg32位还是64位的选择参考文档《Windbg 32位版本和64位版本的选择 》http://blog.youkuaiyun.com/ithzhang/article/details/13096113 “运行调试器的计算机我们成为调试主机,被调试的计算机我们称为目标机。”“如果你的调试主机运行的原创 2014-12-31 17:15:44 · 679 阅读 · 0 评论 -
#pragma pack(n) 的宏实现
#pragma pack(n) 的实现原创 2015-01-20 21:30:56 · 778 阅读 · 0 评论 -
由ObReferenceObject推导windows对象管理器
#define ObReferenceObject(Object) ObfReferenceObject(Object)LONG_PTRFASTCALLObfReferenceObject ( __in PVOID Object )/*++Routine Description: This function increments the referen原创 2015-01-09 16:55:34 · 841 阅读 · 0 评论 -
SEH 中的 __except
我们先看在MSDN2008版提供的一个例子...puts("hello");__try{ puts("in try"); __try{ puts("in try"); RAISE_AN_EXCEPTION(); }__finally{ puts("in finally"); }}__except( puts("in原创 2015-01-28 10:04:46 · 829 阅读 · 0 评论 -
白话IoRegisterFsRegistrationChange
IoRegisterFsRegistrationChange()注册回调函数,监视文件系统的激活或者注销。 status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification );SfFsNotification 函数声明:VOIDSfFsNotification ( IN PDEVIC原创 2015-01-09 16:02:01 · 822 阅读 · 0 评论 -
IoDeleteDevice源码
老样子 我们先上WRK的源码 我还是喜欢从源码入手进行解读VOIDIoDeleteDevice( IN PDEVICE_OBJECT DeviceObject )/*++Routine Description: This routine deletes the specified device object from the system so that转载 2015-01-08 13:26:47 · 757 阅读 · 0 评论 -
windows内核编程 白话设备栈
在ntddk.h中定义了该函数原型: #if (NTDDI_VERSION >= NTDDI_WINXP)NTKERNELAPINTSTATUSIoAttachDeviceToDeviceStackSafe( __in PDEVICE_OBJECT SourceDevice, __in PDEVICE_OBJECT TargetDevice,原创 2014-12-31 17:16:05 · 943 阅读 · 0 评论 -
白话 StackCount StackSize CurrentLocation
先说结论 细节再补充 StackCount = StackSize StackCount 是 StackLocation的数目 StackSize 是 DeviceObjectStack的数目CurrentLocation 指的是 现在所处的StackLocation的位置由于申请IRP者本身不具有irp空间,所以申请时C原创 2015-01-07 13:46:04 · 852 阅读 · 0 评论 -
白话STATUS_PENDING
我们经常看见这样一段驱动的代码:IoCopyCurrentIrpStackLocationToNext( Irp );IoSetCompletionRoutine( Irp, completionRoutine, &waitEvent, TRUE, TRUE,原创 2015-01-06 14:42:21 · 1953 阅读 · 0 评论