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

4 winapi windows-xp windows-vista windows-7

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

eph*_*ent 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守护进程由init脚本启动.

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

  • 微软的.NET实现位于Win32之上.理论上这可能会改变; 但是,我怀疑它会不会发生.即使它确实如此,微软将继续永远支持Win32 API - 甚至Win16 API仍然有效,这要归功于wow32.dll(Windows-on-Windows-32). (2认同)
  • @seane:新的未来现在是Windows运行时,一个围绕Windows API的基于COM的本机包装器.通过这一举措,现在有两个系统在Win32上运行:.NET和WinRT.这使得Win32不太可能被弃用. (2认同)