Win32 API在当前的Windows版本中仍然是“原生的”吗?

时间:2009-05-07 13:44:33

标签: winapi windows-7 windows-vista windows-xp

如果我的程序主要使用win32 API,我的API调用是否在Windows XP / Vista / 7中模拟?

3 个答案:

答案 0 :(得分:7)

在它下面有Windows NT内核,本机NT应用程序使用(很大程度上未记录的)NT API与它进行交互。

csrss.exe,“客户端/服务器运行时子系统”,是一个本机NT应用程序,它提供用户模式Win32子系统,win32k.sys提供内核模式Win32子系统。如果没有这两个加载,Win32应用程序就无法运行。

smss.exe,“会话管理器子系统”,是启动期间要执行的第一个应用程序。作为其任务之一,它启动Win32子系统。

你认为“原生”是什么?内核根本不理解Win32 - 所有Win32 API调用都由运行时和csrss处理,最终归结为NT API调用。但是如果没有Win32子系统,你永远不会运行Windows。


Windows也存在OS / 2和POSIX子系统。我不相信它们是常用的。


如果您熟悉UNIX,这里有一个简单的类比:syslog(3)是原生API吗?

POSIX强制要求它的存在。它可能由libc运行时库实现为“连接到套接字/管道并发送消息”。除非syslogd守护程序正在运行,否则这不起作用。初始化脚本启动syslogd守护程序。

这不是一个完美的类比;许多应用程序不依赖于syslog(3),通常可以停止并重新启动syslogd守护程序而不会对系统的操作产生不利影响(与csrss.exe非常不同)。

答案 1 :(得分:2)

Jared对命名的评论。不确定这是否是您所获得的,但如果您在64位操作系统上运行32位进程,则有一个允许它们运行的​​仿真(或“thunking”)层。这适用于所有64位版本的Windows。

答案 2 :(得分:1)

没有。 Win32 API有点名不副实。它可能应该被命名为Windows API。除非您的代码实际上是以其中一种仿真模式运行,否则不会模拟它。