最新PC机的高级编程技术课件.ppt

上传人(卖家):晟晟文业 文档编号:5181094 上传时间:2023-02-16 格式:PPT 页数:75 大小:1.09MB
下载 相关 举报
最新PC机的高级编程技术课件.ppt_第1页
第1页 / 共75页
最新PC机的高级编程技术课件.ppt_第2页
第2页 / 共75页
最新PC机的高级编程技术课件.ppt_第3页
第3页 / 共75页
最新PC机的高级编程技术课件.ppt_第4页
第4页 / 共75页
最新PC机的高级编程技术课件.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

1、2第一节第一节 软件对接口的访问方式软件对接口的访问方式 裸机裸机BIOS直接访问直接访问 驱动程序驱动程序操作系统操作系统实实模模式式应用程序应用程序返回3页返回4页返回5页返回6页9二、保护模式下的系统地址寄存器二、保护模式下的系统地址寄存器 说明:说明:GDTR GDTR、IDTR IDTR 在进入保护模式前设置,在进入保护模式前设置,TRTR、LDTRLDTR在任在任 务切换时设置。务切换时设置。GDT GDT、IDTIDT整个系统各一个,整个系统各一个,TSSTSS、LDTLDT每个任务一个。每个任务一个。选择符与描述符含义不同。选择符与描述符含义不同。名称名称缩写缩写长度长度内容内

2、容全局描述符表寄存器全局描述符表寄存器GDTRGDTR4848位位GDTGDT的的3232位线性地址位线性地址+16+16位界限值位界限值中断描述符表寄存器中断描述符表寄存器IDTRIDTR4848位位IDTIDT的的3232位线性地址位线性地址+16+16位界限值位界限值任务状态段寄存器任务状态段寄存器TRTR1616位位TSSTSS的的1616位选择符位选择符全局描述符表寄存器全局描述符表寄存器LDTRLDTR1616位位LDTLDT的的1616位选择符位选择符1 1、系统地址寄存器汇总表、系统地址寄存器汇总表10基址基址界限界限选择符选择符TSSTSS描述符描述符线性地址线性地址TSS结

3、构结构2 2、系统地址寄存器与系统表关系、系统地址寄存器与系统表关系基址基址界限界限选择符选择符LDTLDT描述符描述符01LDT2段描述符段描述符段寄存器选择符段寄存器选择符选择符选择符基址基址界限界限IDTR(48bit)01门描述符门描述符IDT2门描述符门描述符基址基址界限界限GDTR(48bit)TR(16bit)选择符选择符01TSS描述符描述符GDT2LDT描述符描述符段描述符段描述符LDTR(16bit)选择符选择符描述符长均为描述符长均为8Byte8Byte返回下页返回12页返回13页11说明说明1 1:GDTGDT表项类型表项类型LDTLDT描述符、描述符、TSSTSS描述

4、符、段描述符;描述符、段描述符;IDTIDT表项类型表项类型中断门描述符、陷阱门描述符、任务门描中断门描述符、陷阱门描述符、任务门描 述符、调用门描述符;述符、调用门描述符;LDTLDT表项类型表项类型段描述符。段描述符。说明说明3 3:表或结构长度表或结构长度=(界限)(界限)+1+1。例:例:GDTRGDTR的内容为的内容为00F0000000FFH00F0000000FFH,求,求GDTGDT的首地址和末地址的首地址和末地址及该表含有多少个描述符及该表含有多少个描述符?转上页解:解:GDTGDT首址首址=00F00000H=00F00000H;GDTGDT末址末址=00F00000H+0

5、FFH=00F000FFH=00F00000H+0FFH=00F000FFH;GDTGDT描述符个数描述符个数=GDT=GDT长度长度/8=(0FFH+1)/8=32/8=(0FFH+1)/8=32。说明说明2 2:不同类型描述符通过第不同类型描述符通过第5 5字节的字节的D3D0D3D0区分。区分。转19页123 3、TSSTSS与与LDTLDT关系关系I/O允许位映象(最大允许位映象(最大8K)中断重定向位映象(中断重定向位映象(32字节)字节)操作系统可利用(长度可变)操作系统可利用(长度可变)I/OI/O允许位映象域基址允许位映象域基址 0 T0 T 0 0 任务任务LDTLDT选择符

6、选择符 0 GS0 GS、FSFS选择符选择符 0 DS0 DS、SSSS选择符选择符 0 CS0 CS、ESES选择符选择符EDIEDI、ESIESI、EBPEBP、EBXEBX、EDXEDX、ECXECX、EAXEAX EFLAG EFLAG、EIPEIPCR3CR3 0 SS2 0 SS2(特权级(特权级2 2)ESP2ESP2 0 SS1 0 SS1(特权级(特权级1 1)ESP1ESP1 0 SS0 0 SS0(特权级(特权级0 0)ESP0ESP0 0 0 反向链反向链00H04H08H0cH10H14H18H1cH20H28H48H50H58H60H64H68HTSS段限段限TS

7、S结构结构当前任务当前任务LDTR选择符选择符上一任务上一任务TR选择符选择符当前任务的段选择符当前任务的段选择符当前任务的优先级可改变,堆当前任务的优先级可改变,堆栈的优先级也要相应改变。栈的优先级也要相应改变。系统为任务的系统为任务的0202级堆栈指针级堆栈指针用用SSiSSi和和ESPiESPi表示。表示。虚拟虚拟8086模式且模式且CR4中中VME=1时有效时有效转10页134 4、门描述符与段选择符关系、门描述符与段选择符关系偏移偏移属性属性选择符选择符IDTRIDT边界边界属性属性基地址基地址GDT/LDT线性地址线性地址中断服务中断服务子程序子程序代码段代码段基地址基地址偏移偏移

8、EIP门描述符门描述符段选择符段选择符或或TSS选择符选择符段描述符段描述符说明:说明:利用段选择符的利用段选择符的bit2bit2确定查询确定查询GDTGDT或或LDTLDT。段选择符指向一个段描述符。段选择符指向一个段描述符。对任务门而言,选择符为对任务门而言,选择符为TSSTSS选择符。选择符。任务的切换:任务的切换:通过直接改变通过直接改变TRTR方式,方式,或通过任务门间接方式实现。或通过任务门间接方式实现。转10页14三、保护模式下三、保护模式下Pentium 4Pentium 4的段式存储管理的段式存储管理 1 1、段式管理的地址变换段式管理的地址变换段寄存器的段寄存器的152位

9、位偏移量偏移量45 32 31 0段描述符段描述符 段表段表32位线性地址位线性地址物理物理地址地址逻辑逻辑地址地址段基址段基址Pentium 系列的虚拟地址空间是系列的虚拟地址空间是24664TB。注意:注意:保护模式下段寄存器的含义已变为段选择符,保护模式下段寄存器的含义已变为段选择符,通常称段寄存器为段选择符。通常称段寄存器为段选择符。152 2、段描述符表与段选择符段描述符表与段选择符RPLTI段选择符段选择符15 2 1 0索引索引TI=1TI=001GDT2段描述符段描述符段描述符段描述符01LDT2段描述符段描述符段描述符段描述符163 3、段描述符段描述符D7 D0段界限段界限

10、 70段界限段界限 158基址基址 70基址基址 158基址基址 2316基址基址 3124TYPESAVLDPLPGD/B0段界限段界限 191601234567返回20页17D7 D0AVLGD/B0段界限段界限 1916用户用户/操作系统可用位操作系统可用位 D/B位位粒度位粒度位 D/B位位代码段代码段(D位位)D=1 使用使用32位操作系统和位操作系统和32位寻址方式位寻址方式D=0 使用使用16位操作系统和位操作系统和16位寻址方式位寻址方式 数据段数据段(B位位)B=1 堆栈使用堆栈使用ESP寄存器,上限为寄存器,上限为FFFFFFFFH B=0 堆栈使用堆栈使用SP寄存器,上限

11、为寄存器,上限为FFFFH 段描述符中的第段描述符中的第6字节:字节:思考:如何知道该段为代码段或数据段?思考:如何知道该段为代码段或数据段?18段描述符中非系统段的第段描述符中非系统段的第5字节:字节:AWREDCE=0E=1S=1DPLPD7 D0存在位存在位特权位特权位S=1是非系统段是非系统段S=0是系统描述符是系统描述符代码段标志代码段标志数据段标志数据段标志兼容位兼容位可读位可读位访问位访问位扩展方向位扩展方向位 可写位可写位 19段描述符中系统段的第段描述符中系统段的第5字节:字节:类型值类型值段类型段类型类型值类型值段类型段类型0(0000)未定义8(1000)未定义1(000

12、1)286的有效任务状态段9(1001)386的有效任务状态段2(0010)LDT描述符10(1010)未定义3(0011)286的忙碌任务状态段11(1011)386的忙碌任务状态段4(0100)286的调用门12(1100)386的调用门5(0101)286或386的任务门13(1101)未定义6(0110)286的中断门14(1110)386的中断门7(0111)286的陷阱门15(1111)386的陷阱门D7 D0TYPESDPLP返回11页20#include stdafx.h#include#include/wtypes.h定义了定义了DWORDLONG,DWORD,WORD等数据

13、类型等数据类型DWORDLONG gdtr,savegdt;/下面是下面是GDT中将创建的数据段描述符表中将创建的数据段描述符表,基地址基地址0X00000F00,段界限为段界限为0XFFFF,优先级为优先级为/3的在内存中的可写数据段,同的在内存中的可写数据段,同P16段描述符段描述符WORD descriptor4=0 xFFFF,0X0F00,0XF200,0X0040;int result10;int main(int argc,char*argv)_asm pushebpsgdtgdtr/将将GDTR寄存器的内容读取到寄存器的内容读取到gdtr开始的开始的6个字节中,其中个字节中,其

14、中/前两个字节给出前两个字节给出GDT的界限值的界限值,高高4个字节给出个字节给出GDT的基地址的基地址movebp,dword ptr gdtr+2 /将将gdt的基地址读到的基地址读到EBP中中addebp,70h /我们选择我们选择70H偏移下的段描述符(偏移下的段描述符(GDT中第中第14个描述符)个描述符)leaedi,savegdtmovesi,ebpmovsdmovsd/以上以上4条指令保存原来在条指令保存原来在70H偏移上的描述符偏移上的描述符movedi,ebpleaesi,descriptor;movsdmovsd /把我们的数据段描述符装入把我们的数据段描述符装入70H偏

15、移上偏移上pushesmovax,0073h /选择字为描述符偏移选择字为描述符偏移70H拼接上低拼接上低3位控制位元位控制位元,/其中其中Ti为为0,表示访问表示访问GDT,RPL为为11,说明说明3级优先级级优先级,所以就为所以就为73H 转16页21moves,ax/ES装入选择字装入选择字73Hleaedi,result /将存放输出结果的变量的地址放在将存放输出结果的变量的地址放在EDI中中moveax,1movebx,1_asmmovcx,10a1:moves:eax,eaxaddeax,4loopa1 /上面上面4条指令将向物理地址条指令将向物理地址0X00000F00处写处写1

16、0个双字个双字_asmmovcx,10a2:moveax,es:ebxmovedi,eaxaddebx,4addedi,4loopa2/以上从物理地址以上从物理地址0X00000F00处依次读出处依次读出10个数据存放在个数据存放在/result数组中数组中_asmpopespopebp 22printf(result=););for(int i=0;i10;i+)printf(%d,resulti););/输出结果输出结果return 0;23四、保护模式下四、保护模式下Pentium 4Pentium 4的虚拟页式存储管理的虚拟页式存储管理 主存主存页框页框页面页面程序程序1程序程序2程序

17、程序3241 1、页面大小选择页面大小选择PGEPCE831 7 6 5 4 3 2 1 0MCEPAE PSEDE TSDVMEPVI保留,缺省为全保留,缺省为全0CR4PAEPSE物理地址位数物理地址位数页面大小页面大小0032位位4KB0132位位4KB/4MB1036位位4KB1136位位4KB/2MB252 2、3232位位4KB4KB分页方式地址变换分页方式地址变换 32位线位线性地址性地址页目录项号页目录项号页面号页面号偏移偏移CR332位物理地址位物理地址31 22 21 12 11 0页目录页目录页表页表31 12 11 9 8 7 6 5 4 3 2 1 0PWTPCD页表

18、基地址页表基地址3112PRWUSAVLAD0页目页目录项录项PWTPCD页框基地址页框基地址3112PRWUSAVLAD页表页表项项31 12 11 9 8 7 6 5 4 3 2 1 0P=出现位,出现位,US=用户用户/监督位,监督位,PCD是页是页Cache禁止,禁止,D=Cache“脏脏”位,位,RW=读读/写位,写位,PWT=页写贯穿位,页写贯穿位,A=访问位,访问位,AVL=用户的操作系统可用用户的操作系统可用位。而第位。而第7位(位(PS)在)在4KB分页中为分页中为0 263 3、3232位位4MB4MB分页方式地址变换分页方式地址变换 32位线性地址位线性地址页目录项号页目

19、录项号偏移偏移CR332位物理地址位物理地址31 22 21 0页目录页目录31 22 8 7 6 5 4 3 2 1 0PWTPCD页框基地址页框基地址3122PRWUSAD1页目录项页目录项274 4、3636位位4KB4KB分页方式地址变换分页方式地址变换 31 5 4 3 2 1 0PWTPCD32字节对齐的字节对齐的PDPT基地址基地址CR3寄存寄存器器31 36 35 12 11 6 5 4 3 2 1 0PWTPCDPAVLPDPT项项4KB对齐的页目录基地址(高对齐的页目录基地址(高24位)位)32位线性地址位线性地址页目录项号页目录项号页面号页面号偏移偏移CR336位物理地址

20、位物理地址31 30 29 21 20 12 11 0页目录页目录页表页表PDPT项号项号页目录指针表页目录指针表464位位51264位位51264位位63 36 35 12 11 9 8 7 6 5 4 3 2 1 0PWTPCD4KB对齐的页表基地址对齐的页表基地址PRWUSAVLA0页目录项页目录项PWTPCD4KB对齐的页框基地址对齐的页框基地址PRWUSAVLAD页表项页表项63 36 35 12 11 9 8 7 6 5 4 3 2 1 00G285 5、3636位位2MB2MB分页方式地址变换分页方式地址变换 32位线性地址位线性地址页目录项号页目录项号偏移偏移CR336位物理地

21、址位物理地址31 30 29 21 20 0页目录页目录PDPT项号项号页目录指针表页目录指针表464位位51264位位页目录项页目录项PWTPCD2MB对齐的页框基地址对齐的页框基地址PRWUSAVLAD63 36 35 21 20 12 11 9 8 7 6 5 4 3 2 1 01G低低21位位高高15位位29第三节第三节 Windows 9xWindows 9x驱动程序设计驱动程序设计 一、虚拟机与一、虚拟机与VxDVxD的引入的引入计算机底层硬件计算机底层硬件操作系统内核与操作系统内核与VxD操作系统提供的接口操作系统提供的接口应用软件应用软件特权级特权级3特权级特权级030Wind

22、ows 9xWindows 9x运行环境:运行环境:Windows 9x虚拟机环境虚拟机环境SYSVMWin16地址空间地址空间Win16程序程序Win16程序程序Win16程序程序Win16程序程序Win32程序程序Win32地址空间地址空间Win32程序程序Win32地址空间地址空间DOSVMDOS程序程序DOSVMDOS程序程序31二、虚拟机下二、虚拟机下I/OI/O端口访问端口访问 执行执行in,out指令指令CPLIOPL?IOPM相关位相关位=0?进行进行I/O操作操作否否否否产生一个一产生一个一般保护异常般保护异常 是是是是IOPLIOPL用以表示指定的用以表示指定的I/OI/O

23、操作处操作处于特权级的哪一级。它在于特权级的哪一级。它在EFLAGSEFLAGS中。中。CPLCPL当前段的当前段的I/OI/O优先级,它实优先级,它实际上是际上是CSCS段选择符的第段选择符的第00第第1 1位。位。IOPMIOPM是对所有是对所有VMVM都起作用都起作用的权限机制,它以位(的权限机制,它以位(bitbit)来代表每个端口。某位为来代表每个端口。某位为1 1,则该代表的端口被禁止访问;则该代表的端口被禁止访问;某位为某位为0 0,则允许访问该位所,则允许访问该位所代表的端口。代表的端口。1 1、保护模式下、保护模式下I/OI/O访问访问 约定:约定:IOPL为为0。322 2

24、、V86V86模式下模式下I/OI/O访问访问 执行执行in,out指令指令IOPM相关位相关位=0?进行进行I/O操作操作否否产生一个一产生一个一般保护异常般保护异常 是是 约定:约定:忽略忽略CPLCPLIOPL的判断。的判断。访问:访问:符合符合保护模式下的保护模式下的I/O访问规则。访问规则。如何捕获一个端口的访问?如何捕获一个端口的访问?配置配置IOPM相关位相关位333 3、VxDsVxDs捕获的捕获的I/OI/O端口端口34三、虚拟机下三、虚拟机下中断或异常的处理中断或异常的处理 外部中断和处理器异常外部中断和处理器异常 软中断软中断 CPL门描述符门描述符的的DPL?是是访问各

25、类门描述符访问各类门描述符 转移后代码段的转移后代码段的DPLCPL?是是执行执行0特权级别中的中断处理程序特权级别中的中断处理程序 禁止访问禁止访问 否否否否 约定:约定:外部中断和异常处理的外部中断和异常处理的DPLDPL为为0 0;软中断的软中断的DPLDPL不变,为设定值。不变,为设定值。35 特权切换:特权切换:中断处理程序中断处理程序特权级为特权级为0;转移后转移后DPLCPLDPLCPL时,运行中断处理程序。时,运行中断处理程序。Win32Win32程序程序虚拟机虚拟机VxDVxD中中的回调的回调函数函数 VPICD VPICDINT xINT xCALLCALLRETRETIR

26、ETIRET硬件中断硬件中断IRETIRET异常处理程序异常处理程序 思考:思考:如何使自己从用户级转到核心级?如何使自己从用户级转到核心级?利用保护模式下中断的处理流程。利用保护模式下中断的处理流程。36例:例:在在IDT中构造一个中断门描述符,使它的中构造一个中断门描述符,使它的DPL=3,这样它就可以被用户级的程序访问(这样它就可以被用户级的程序访问(DPLCPL),),将该中断门描述符的段选择字设为将该中断门描述符的段选择字设为028H,显然该选,显然该选择字对应的代码段在择字对应的代码段在GDT中,由于中,由于OS代码段基地址代码段基地址为为00000000H,段界限为,段界限为FF

27、FFFFFFH,所以现在中,所以现在中断门的偏移量就实际给出了中断处理程序入口的线性断门的偏移量就实际给出了中断处理程序入口的线性地址,我们只要把一个过程作为中断处理程序,这个地址,我们只要把一个过程作为中断处理程序,这个过程就处在核心级里了。过程就处在核心级里了。程序如下:程序如下:37#include stdafx.h#include#include/wtypes.h定义了定义了DWORDLONG,DWORD,WORD等数据类型等数据类型DWORD_cr0;/用来保存用来保存CR0寄存器的寄存器的值值void _declspec(naked)newint3(void)/运行在核心级的中断运

28、行在核心级的中断3处理程序处理程序_asmmoveax,cr0/这是必须在核心级才能执行的特权指令这是必须在核心级才能执行的特权指令mov_cr0,eax_asmiretd/中断返回中断返回int main(int argc,char*argv)DWORDLONG idtr,saveidt;WORDnewgate4=0 x0000,0 x0028,0 xee00,0 x0000;/中断门描述符中断门描述符_asmsidtidtr/将将IDTR的值存在的值存在idtr变量开始的变量开始的6个字节中个字节中movebx,DWORD ptridtr+2/把把IDT的基地址读入的基地址读入EBX寄存器

29、寄存器addebx,24/选择中断选择中断3作为进入核心级的入口,中断作为进入核心级的入口,中断3的门描述符的门描述符/的地址是的地址是IDT基地址加上基地址加上3*8(每个门描述符(每个门描述符8个字节)个字节)movesi,ebxleaedi,saveidtmovsdmovsd/保存原来中断保存原来中断3的门描述符到的门描述符到saveidt中中leaeax,newint3转下页38movnewgate,axshreax,16movnewgate+6,ax /向新的中断描述符中填入中断处理程序的偏移量向新的中断描述符中填入中断处理程序的偏移量leaesi,newgatemovedi,ebx

30、movsdmovsd/用新中断描述符在用新中断描述符在IDT中替换原来的中断中替换原来的中断3描述符描述符int3h/触发中断触发中断3,使程序跳转到,使程序跳转到0级执行中断处理程序级执行中断处理程序leaesi,saveidtmovedi,ebxmovsdmovsd/恢复原来中断恢复原来中断3的门描述符的门描述符 printf(cr0=0 x%x,_cr0););/输出结果输出结果return 0;返回上页P PDPLDPL0111001110000000保留保留偏移量偏移量15001500偏移量偏移量31163116段选择符段选择符(28HC,30H-D)(28HC,30H-D)31 1

31、6 15 14 13 12 8 7 6 5 4 031 16 15 14 13 12 8 7 6 5 4 0中断门描述符:中断门描述符:39四、虚拟设备驱动程序四、虚拟设备驱动程序(VxD)(VxD)基础基础1 1、VxD的程序文件结构的程序文件结构 VxD包含五个段:包含五个段:VxD_CODEVxD_CODE(保护模式下的代码段保护模式下的代码段):含设备驱动程序回调例程、:含设备驱动程序回调例程、服务程序、服务程序、APIAPI接口函数和控制程序。接口函数和控制程序。VxD_DATAVxD_DATA(保护模式下的数据段保护模式下的数据段):包含设备描述块、服务表、:包含设备描述块、服务表

32、、全局变量等。全局变量等。VxD_ICODEVxD_ICODE(保护模式下的初始化代码段保护模式下的初始化代码段):初始化时用的服务:初始化时用的服务程序和过程,初始化后被丢弃。程序和过程,初始化后被丢弃。VxD_IDATAVxD_IDATA(保护模式下的初始化数据段保护模式下的初始化数据段):初始化时用的数据,:初始化时用的数据,初始化后被丢弃。初始化后被丢弃。VxD_REAL_INITVxD_REAL_INIT(实模式下的初始化资料与代码实模式下的初始化资料与代码):初始化时调:初始化时调用,该过程返回后被丢弃。用,该过程返回后被丢弃。每个每个VxDVxD装入主存后产生一个对象,每种型号的

33、设备装入主存后产生一个对象,每种型号的设备共用一个共用一个VxD对象。对象。402 2、VxDVxD的设备描述符块的设备描述符块DDB DDB typedef struct tagDDB DWORDDDB_Next;/VMM使用这一项来指出下一个使用这一项来指出下一个DDB的地址的地址WORDDDB_SDK_Version;/建立该建立该VxD所使用的所使用的SDK/DDK的版本号的版本号WORDDDB_Req_Device_Number;/设备设备ID。UNDEFINED_DEVICE_ID/表示不使用唯一表示不使用唯一IDBYTEDDB_Dev_Major_Version;/VxD的主版本

34、号的主版本号BYTEDDB_Dev_Minor_Version;/VxD的次版本号的次版本号WORDDDB_Flags;/DDB标志位标志位BYTEDDB_Name8;/VxD的名字的名字,不足,不足8个字节必须以空格补满个字节必须以空格补满DWORDDDB_Init_Order;/指定指定VxD的初始化顺序,如果没有特别的初的初始化顺序,如果没有特别的初/始化要求就使用始化要求就使用UNDEFINED_INIT_ORDERDWORDDDB_Control_Proc;/设备控制程序的地址设备控制程序的地址DWORDDDB_V86_API_Proc;/V86API程序的入口地址程序的入口地址DW

35、ORDDDB_PM_API_Proc;/保护模式保护模式API程序的入口地址程序的入口地址DWORDDDB_V86_API_CSIP/V86入口点的入口点的CS:IPDWORDDDB_PM_API_CSIP;/保护模式入口点的保护模式入口点的CS:IPDWORDDDB_Reference_Data;/实模式初始化代码设置的参考资料实模式初始化代码设置的参考资料DWORDDDB_VxD_Service_Table_Ptr;/VxD服务表的地址服务表的地址DWORDDDB_VxD_Service_Table_Size;/VxD服务表中提供的服务表中提供的VxD服务的服务的 /数目数目 DDB;每个

36、设备(含同型号设备)均有一个每个设备(含同型号设备)均有一个DDB。413 3、VxDVxD的加载与卸载的加载与卸载 动态加载:动态加载:API函数函数发的消息发的消息功能功能CreateFileSys_Dynamic_Device_Init加载加载VxDDeviceIOControlW32_DeviceIOControl与与VxD进行交互进行交互处理处理CloseHandleSys_Dynamic_Device_Exit卸载卸载VxDhDevicehDevice=CreateFile=CreateFile(.myfirst.vxd,0,0,0,OPEN_EXISTING,.myfirst.v

37、xd,0,0,0,OPEN_EXISTING,FILE_FLAG_DELETE_ON_CLOSE,0FILE_FLAG_DELETE_ON_CLOSE,0););DeviceIoControlDeviceIoControl(hDevicehDevice,DIOC_MY_IODIOC_MY_IO,NULL,0,NULL,0,NULL,0,NULL,0,NULL,NULLNULL,NULL););CloseHandleCloseHandle(hDevicehDevice););加载:加载:使设备与使设备与Win32 API挂钩。挂钩。42静态加载:静态加载:434 4、VMMVMM与与VxDVxD

38、间的消息间的消息 5 5、Win32Win32与与VxDVxD间的通信间的通信 Win32 Win32 应用程序应用程序调用指令调用指令 回调函数回调函数 VxDVxDDeviceIoControl()DeviceIoControl()1.Shell_PostMessage()1.Shell_PostMessage()给应用程序消息给应用程序消息2.VWIN32_QueueUserApc()2.VWIN32_QueueUserApc()给应用线程事件给应用线程事件3.3.发通过转换后的发通过转换后的Ring0Ring0级事件给应用程序级事件给应用程序44第四节第四节 Windows 2000/

39、XPWindows 2000/XP设备驱动设备驱动程序设计程序设计 一、一、Windows 2000/XPWindows 2000/XP的设备驱动程序的设备驱动程序 虚拟设备虚拟设备驱动程序(驱动程序(VDD)内核模式内核模式驱动程序驱动程序文件系统文件系统驱动程序驱动程序保留设备保留设备驱动程序驱动程序PnP驱动程序驱动程序显示显示驱动程序驱动程序WDM驱动程序驱动程序类驱动程序类驱动程序迷你驱动程序迷你驱动程序45 虚拟设备驱动程序虚拟设备驱动程序(Virtual Device Driver(Virtual Device Driver,VDD)VDD)可使可使DOSDOS应用程序访问应用程

40、序访问x86x86平台上的硬件,也可支持平台上的硬件,也可支持Windows 9xWindows 9x下的对端口访问。下的对端口访问。WDMWDM驱动程序驱动程序是一种遵循电源管理协议并能在是一种遵循电源管理协议并能在Win98Win98和和Win2000Win2000上实现源代码级兼容的上实现源代码级兼容的PnPPnP驱动程序。驱动程序。WDMWDM驱动程序又可分为类驱动程序(管理已定义类的设备驱动程序又可分为类驱动程序(管理已定义类的设备)和迷你驱动程序(提供厂商专有的支持)。)和迷你驱动程序(提供厂商专有的支持)。显示驱动程序显示驱动程序是用于显示和打印设备的内核模式驱是用于显示和打印设

41、备的内核模式驱动程序。动程序。文件系统驱动程序文件系统驱动程序在本地磁盘或网络上实现标准在本地磁盘或网络上实现标准PCPC文件系统模型文件系统模型(含多层次目录结构和命名文件概念含多层次目录结构和命名文件概念)。保留设备驱动程序保留设备驱动程序主要包括主要包括Windows NTWindows NT早期版本的早期版本的驱动程序,它直接控制一个硬设备而不用其他驱动程驱动程序,它直接控制一个硬设备而不用其他驱动程序帮助,可以不做修改地在序帮助,可以不做修改地在Windows 2000Windows 2000中运行。中运行。46二、二、WDMWDM的基本结构的基本结构1 1、设备对象及设备对象栈设备

42、对象及设备对象栈 设备对象设备对象:系统为帮助软件管理硬件而创建的一个数系统为帮助软件管理硬件而创建的一个数据结构(包括据结构(包括PDO、FDO、FiDO)。硬件仅指某功能设备,多功能设备有几个设备对象。硬件仅指某功能设备,多功能设备有几个设备对象。PDO(PDO(物理设备对象物理设备对象):):设备对象中的物理型对象。设备对象中的物理型对象。FDO(FDO(功能设备对象功能设备对象):):设备对象中的功能型对象。设备对象中的功能型对象。FiDO(FiDO(过滤器设备对象过滤器设备对象):):在在I/OI/O管理器、管理器、FDOFDO和和PDOPDO间的间的监视、修改监视、修改IRPIRP

43、流的过滤型对象,分上层过滤和下层过流的过滤型对象,分上层过滤和下层过滤对象。滤对象。设备对象栈设备对象栈:描述对设备对象内部处理请求的驱动层描述对设备对象内部处理请求的驱动层次的栈型结构,是设备对象的内部属性次的栈型结构,是设备对象的内部属性。转下页47FDOFDO设备对象设备对象FiDOFiDOFiDOFiDOPDOPDO设设备备对对象象栈栈上层过滤器驱动程序上层过滤器驱动程序功能驱动程序功能驱动程序下层过滤器驱动程序下层过滤器驱动程序总线驱动程序总线驱动程序IRPIRPI/OI/O系统服务系统服务Win32Win32子系统子系统应用程序应用程序用户态用户态核心态核心态I/OI/O管理器管理

44、器返回上页返回下页返回49页返回50页482 2、设备驱动程序设备驱动程序 WDM模型中,设备驱动程序有下列几种类型:模型中,设备驱动程序有下列几种类型:功能驱动程序功能驱动程序:管理管理FDO所代表的设备,负责其初所代表的设备,负责其初始化、处理始化、处理I/O操作、操作、I/O操作完成时产生中断事件,操作完成时产生中断事件,为用户提供一种适当的设备控制方式。为用户提供一种适当的设备控制方式。总线驱动程序:总线驱动程序:负责管理负责管理PDO硬件和计算机之间的硬件和计算机之间的连接。连接。过滤器驱动程序:过滤器驱动程序:管理管理FiDO所代表的设备,用于监所代表的设备,用于监视和修改视和修改

45、IRP流,硬件或软件人员可利用过滤器驱动流,硬件或软件人员可利用过滤器驱动程序修改上级驱动程序的传递过来的操作。程序修改上级驱动程序的传递过来的操作。每种硬件设备的驱动程序由上述两到三种驱动程序每种硬件设备的驱动程序由上述两到三种驱动程序组成组成(可以无可以无过滤器驱动程序)。过滤器驱动程序)。相同类型的总线共用一种相同类型的总线共用一种总线驱动程序(如总线驱动程序(如PCI总总线驱动程序)。线驱动程序)。转上页493 3、设备对象与设备驱动程序设备对象与设备驱动程序a.a.功能设备与设备对象功能设备与设备对象 每个功能设备对应一个设备对象(设备对象栈为设每个功能设备对应一个设备对象(设备对象

46、栈为设备对象内部属性),相同型号的多个功能设备对应多备对象内部属性),相同型号的多个功能设备对应多个设备对象。个设备对象。每个每个设备对象设备对象具有不同的具有不同的私有属性值私有属性值(如设备如设备ID)ID)。c.c.设备对象与驱动程序设备对象与驱动程序 相同类型的多个设备对象共用一个过滤驱动相同类型的多个设备对象共用一个过滤驱动程序程序和和功能驱动程序,即指向同一个驱动程序对象功能驱动程序,即指向同一个驱动程序对象。b.b.设备驱动程序与设备驱动程序对象设备驱动程序与设备驱动程序对象 设备驱动程序加载时建立一个设备驱动程序对象设备驱动程序加载时建立一个设备驱动程序对象。转47页504 4

47、、应用程序对、应用程序对设备对象的操作过程设备对象的操作过程 Win32子系统处理:子系统处理:将将I/O操作操作转换转换后交后交I/O管理器管理器处理,处理,I/O管理器创建一个管理器创建一个I/O请求包请求包(IRP)后,送到后,送到设备对象栈的最上层设备对象对应的设备对象栈的最上层设备对象对应的驱动程序驱动程序。转47页 操作接口:操作接口:设备驱动程序的设备驱动程序的Win32 API函数,或重函数,或重载的设备驱动程序的载的设备驱动程序的Win32 API回调函数。回调函数。操作参数:操作参数:设备句柄、操作类型及其它信息设备句柄、操作类型及其它信息。例:例:DeviceIoCont

48、rolDeviceIoControl(hDevicehDevice,DIOC_MY_IODIOC_MY_IO,NULL,0,NULL,0,NULL,0,NULL,NULL NULL,0,NULL,NULL););驱动程序处理:驱动程序处理:每层驱动程序都可决定如何处理每层驱动程序都可决定如何处理IRP,既可直接处理完该,既可直接处理完该IRP就不再向下传,也可处就不再向下传,也可处理完后继续向下传递,还可只做向下传递工作。下层理完后继续向下传递,还可只做向下传递工作。下层处理完的返回信息又通过该包的结构逐层向上传递。处理完的返回信息又通过该包的结构逐层向上传递。515 5、设备、设备驱动程序的

49、装入过程驱动程序的装入过程总线驱动程序检总线驱动程序检测到新的硬件测到新的硬件安装向导指定新安装向导指定新的硬件类型的硬件类型取得厂商、设备类型、版本、资源需求等信息取得厂商、设备类型、版本、资源需求等信息取配置头区域信息取配置头区域信息由指定得到信息由指定得到信息硬件接入硬件接入添加新设备添加新设备系统重启系统重启检测检测指定指定PnPPnP管理器就创建管理器就创建PDOPDO,在注册表中添加某些项,在注册表中添加某些项所有硬件检测完毕?所有硬件检测完毕?NYPnPPnP管理器决定分配哪些资源给各个设备管理器决定分配哪些资源给各个设备52PnPPnP管理器查找注册表中与该管理器查找注册表中与

50、该PDOPDO相吻合的各级驱动程序相吻合的各级驱动程序执行执行DriverEntry()DriverEntry(),设置各例程的入,设置各例程的入口地址,将对象指针装入口地址,将对象指针装入I/OI/O管理器中管理器中找到?找到?NY读读INFINF文件,按文件,按INFINF文件文件指令安装各级驱动程序指令安装各级驱动程序PnPPnP管理器装入最底层过滤驱动程序,调用其管理器装入最底层过滤驱动程序,调用其AddDeviceAddDevice函数,函数,该函数创建一个该函数创建一个FiDOFiDO,实现,实现FiDOFiDO与同级驱动程序的连接与同级驱动程序的连接PnPPnP管理器查找所选驱动

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(最新PC机的高级编程技术课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|