3.4 补充说明
大部分的Win32API都是通过NativeAPI实现的,NativeAPI函数一般都是Win32API函数前面加上Nt两个字符,例如CreateFile函数对应着NtCreateFile函数,这些Nt函数都是在“ntdll.dll”实现的,而多数Win32API都是在“kernel.dll”导出的,也有少部分GDI或窗口相关的函数是在“gdi32.dll”和“user32.dll”导出的。
NativeAPI从用户模式穿越进入到内核模式调用系统服务,这个穿越过程是通过软中断的方式进入的。这个软中断的实现方法在不同版本的Windows实现方式略有不同,在Win2K下是通过“int2eh”实现的,在WinXP是通过“sysenter”指令完成的。
软中断会将NativeAPI的参数和系统服务号的参数一起传进内核模式,不同的Native API会对应不同的系统服务号,这个过程是由SSDT辅助完成的。
系统服务函数一般和NativeAPI具有相同的名字,例如都是NtCreateFile,但它们的实现不同,系统服务调用是在“ntoskrnl.exe”导出的。
大部分的Win32API都是通过NativeAPI实现的,NativeAPI函数一般都是Win32API函数前面加上Nt两个字符,例如CreateFile函数对应着NtCreateFile函数,这些Nt函数都是在“ntdll.dll”实现的,而多数Win32API都是在“kernel.dll”导出的,也有少部分GDI或窗口相关的函数是在“gdi32.dll”和“user32.dll”导出的。
NativeAPI从用户模式穿越进入到内核模式调用系统服务,这个穿越过程是通过软中断的方式进入的。这个软中断的实现方法在不同版本的Windows实现方式略有不同,在Win2K下是通过“int2eh”实现的,在WinXP是通过“sysenter”指令完成的。
软中断会将NativeAPI的参数和系统服务号的参数一起传进内核模式,不同的Native API会对应不同的系统服务号,这个过程是由SSDT辅助完成的。
系统服务函数一般和NativeAPI具有相同的名字,例如都是NtCreateFile,但它们的实现不同,系统服务调用是在“ntoskrnl.exe”导出的。