【发布时间】:2013-07-30 16:13:21
【问题描述】:
我了解 Windows API 的功能远远超出操作系统内核的预期功能。我的问题是 Windows API 和内核之间的联系是什么? Windows API 是否包含其中的所有内核函数作为子集?
【问题讨论】:
我了解 Windows API 的功能远远超出操作系统内核的预期功能。我的问题是 Windows API 和内核之间的联系是什么? Windows API 是否包含其中的所有内核函数作为子集?
【问题讨论】:
没有连接。 winapi 是原生操作系统之上的一层。它的设计类似于 Windows 版本 3 的 api,旨在使移植程序变得容易。它是三个 api 层之一,OS/2 和 Posix,其他两个。但是由于没有人使用它们而被删除,winapi以压倒性优势获胜。原来的名字是“win32”,和16位的版本区别开来,但是当64位的Windows出现的时候,造成了太多的混乱,所以今天大家都叫它“winapi”。
原生操作系统看起来很不一样,它很像 VMS。这不是巧合,他们有同一个设计师。大卫卡特勒,他曾经在 DEC 内爆之前为它工作。当 DEC 抱怨时,钱转手了。
本机 api 未记录。有意让微软在操作系统上进行创新,同时仍然允许旧程序运行。这不是一个保守的秘密,它已经过大量的逆向工程。其中一些确实得到了记录,例如名称以“Nt”和“Rtl”开头的函数。像 NtCreateFile 和 RtlFillMemory。 Rtl 函数是将 winapi 与本机 api 结合起来的粘合剂的一部分。当您编写设备驱动程序时,您还将更多地接触本机 api。
【讨论】:
Windows API(又名“Win32”)包含许多东西,包括内核访问。
http://technet.microsoft.com/en-us/library/cc768129.aspx
下面的层 Win32 是“Native API”,由“ntdll.dll”介导:
当 Win32 函数实际调用内核时,它使用“陷阱”。在 Intel x86 PC 上),它使用中断 0x2e。以下是有关其工作原理的一些很好的链接:
【讨论】:
SYSENTER 指令而不是 INT 2Eh