这里是我学习过程中我觉得有必要记下来的,以免下次再去看英文……
IoCreateDevice参数问题:
此函数是用来创建设备的。其各个参数含义如下:
DriverObject :从I/O管理器中传进来的驱动对象,这个参数是系统通过DriverEntry的第一个参数传进来的。
DeviceExtensionSize:指定设备扩展结构体的大小。此结构体是自己定义的。
DeviceName:顾名思义,创建的设别的设备名称。需要注意的是驱动程序中都是Unicode的。
DeviceType:指定设备的类型。
DeviceCharacteristics:指定一些有关此设备的额外信息。
Exclusive:指定此设备是否在同一时刻只允许打开一个handle。
DeviceObject :传进来一个变量保存创建好的设备指针。
任务状态段
任 务 状 态 段 基 本 部 分 的 格 式 |
BIT31—BIT16 | BIT15—BIT1 | BIT0 | Offset |
0000000000000000 | 链接字段 | 0 | ||
ESP0 | 4 | |||
0000000000000000 | SS0 | 8 | ||
ESP1 | 0CH | |||
0000000000000000 | SS1 | 10H | ||
ESP2 | 14H | |||
0000000000000000 | SS2 | 18H | ||
CR3 | 1CH | |||
EIP | 20H | |||
EFLAGS | 24H | |||
EAX | 28H | |||
ECX | 2CH | |||
EDX | 30H | |||
EBX | 34H | |||
ESP | 38H | |||
EBP | 3CH | |||
ESI | 40H | |||
EDI | 44H | |||
0000000000000000 | ES | 48H | ||
0000000000000000 | CS | 4CH | ||
0000000000000000 | SS | 50H | ||
0000000000000000 | DS | 54H | ||
0000000000000000 | FS | 58H | ||
0000000000000000 | GS | 5CH | ||
0000000000000000 | LDTR | 60H | ||
I/O许可位图偏移 | 000000000000000 | T | 64H |
;---------------------------------------------------------------------------- ;任务状态段结构类型定义 ;---------------------------------------------------------------------------- TSS STRUC TRLink DW 0 ;链接字段 DW 0 ;不使用,置为0 TRESP0 DD 0 ;0级堆栈指针 TRSS0 DW 0 ;0级堆栈段寄存器 DW 0 ;不使用,置为0 TRESP1 DD 0 ;1级堆栈指针 TRSS1 DW 0 ;1级堆栈段寄存器 DW 0 ;不使用,置为0 TRESP2 DD 0 ;2级堆栈指针 TRSS2 DW 0 ;2级堆栈段寄存器 DW 0 ;不使用,置为0 TRCR3 DD 0 ;CR3 TREIP DD 0 ;EIP TREFlag DD 0 ;EFLAGS TREAX DD 0 ;EAX TRECX DD 0 ;ECX TREDX DD 0 ;EDX TREBX DD 0 ;EBX TRESP DD 0 ;ESP TREBP DD 0 ;EBP TRESI DD 0 ;ESI TREDI DD 0 ;EDI TRES DW 0 ;ES DW 0 ;不使用,置为0 TRCS DW 0 ;CS DW 0 ;不使用,置为0 TRSS DW 0 ;SS DW 0 ;不使用,置为0 TRDS DW 0 ;DS DW 0 ;不使用,置为0 TRFS DW 0 ;FS DW 0 ;不使用,置为0 TRGS DW 0 ;GS DW 0 ;不使用,置为0 TRLDTR DW 0 ;LDTR DW 0 ;不使用,置为0 TRTrip DW 0 ;调试陷阱标志(只用位0) TRIOMap DW $ 2 ;指向I/O许可位图区的段内偏移 TSS ENDS