列表5-1. service_descriptor_table结构的定义
windows 2000还提供了另一个服务描述符表参数块----keservicedescriptortableshadow。不过,keservicedescriptortable已经由ntoskrnl.exe公开的导出了,因此,内核模式的驱动程序可以很容易的访问它,而keservicedescriptortableshadow则不行。在windows 2000下,keservicedescriptortableshadow紧随keservicedescriptortable之后,但是你不能在windows nt中以这样的方法找到它,因为,这一规则并不使用于windows nt。可能在windows 2000的后续版本的中,这种方法也不行。这两个参数块的不同之处在于:keservicedescriptortableshadow中的第二个项被系统使用了,用来指向内部的w32pservicetable和w32pargumenttable结构,win32的内核模式组件win32k.sys使用这两个结构来分派自己的api调用,如图5-2所示。kisystemservice()通过检查eax中索引值的第12和13位来确认是不是应该由win32k.sys处理api调用。如果这两个位都是0,则是由ntoskrnl.exe