bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
阅读:1332回复:2

zhaock请快定义你的第一个情景

楼主#
更多 发布于:2005-05-19 11:19
zhaock请快定义你的第一个情景,从2k或nt哪个文件开始,好让大家有所准备!!! :)
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-19 12:22
辛苦了。。hoho。。
等待你们的果实中。。。。。。。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-05-20 20:13
呵呵,催得紧呀
第一个情景提纲(基于intel 32,基于win 2k的代码,2k没有的参考一下nt4的代码,)

1.先从硬件中断的处理讲起假设大家知道386保护模式编程的基本概念,idt,gdt等等不再赘述,可以查看相关资料
对应硬件中断的idt的表项是调用什么函数安装的
这就先要讲述一下InterruptObject的结构,和KeInitializeInterrupt这个函数

typedef struct _KINTERRUPT {
CSHORT Type;
 CSHORT Size;
LIST_ENTRY InterruptListEntry;
PKSERVICE_ROUTINE ServiceRoutine;
PVOID ServiceContext;
KSPIN_LOCK SpinLock;
ULONG Spare1;
PKSPIN_LOCK ActualLock;
PKINTERRUPT_ROUTINE DispatchAddress;
ULONG Vector;
KIRQL Irql;
KIRQL SynchronizeIrql;
BOOLEAN FloatingSave;
BOOLEAN Connected;
CCHAR Number;
BOOLEAN ShareVector;
KINTERRUPT_MODE Mode; ULONG ServiceCount;
ULONG Spare3;
ULONG DispatchCode[DISPATCH_LENGTH];
 } KINTERRUPT;

DispatchCode是真正的硬件中断通过idt执行的代码,
是从KiInterruptTemplate Copy到DispatchCode的,(在有些情况下可能是InterruptObject->DispatchAddress,需要进一步分析代码)
汇编代码KiInterruptTemplate在ke\\i386\\intsup.asm中 在KeConnectInterrupt中(ke\\i386\\intobj.c)中真正的将DispatchCode(或者可能DispatchAddress)的地址设置到Idt中

一般流程是DispatchCode call DispatchAddress,DispachAddress调用ServiceRoutine,是驱动程序提供的真正中断处理函数

详细描述一个中断产生后,完整的处理流程,会给出Trap的详细结构,

讲述一下idt,irql,vector的关系,x86的中断处理,有pic,和apic两种硬件支持, inside 2k里说单cpu 是pic,多cpu用apic,
但用ice看hal的代码,里面涉及到tpl,因为tpl是apic的概念,所以我现在尚没有搞清楚我们现在的P IV单cpu到底是pic,还是apic,
需要查阅一下相关的硬件资料,同时好好反汇编一下相关代码,同时参看nt4的hal部分,
代码代码在ntos\\nthals目录下

接下来会重点分析一下时钟中断的流程,也会涉及到DPC,APC,就会分析DPC,APC相关的结构,代码,

2.接下来讲一下KeSystemService的流程,在ke\\i386\\trap.asm中,和硬件中断的流程,做个比较,

3.然后讲一下int 0e这类异常的处理,和上两种情况做个对比,会涉及到exception的流程

大致按照这个顺序展开开始写
游客

返回顶部