现代Windows架构中Win32的作用是什么?

6
在微软BUILD会议上,我看到了这个图。 我想知道Win32的位置是否正确。在现代Windows架构中,Win32 API扮演什么角色和地位?
我对Win32 API的概念是所有现代Windows架构的一种汇编。 Win32 API(或DDK)将“Windows内核服务”桥接到其他技术中。
我认为Internet Explorer / .NET / Silverlight都是建立在Win32 API之上的。即使是新奇的Metro应用程序,我猜想Win32也是处于底层的位置。然而,这个图让我感到困惑。
正如你所看到的,IE / .NET / SL / Metro与Win32平行排列。
问题:
1.这个图是否意味着Win32不是所有其他现代技术的框架?
2.“Windows内核服务”是什么?程序员如何访问它们?难道不是通过Win32 API和DDK吗?
图片地址:Windows 8 Platform
2个回答

9

这张图表是错误的。

虽然最初有其他子系统(如POSIX)可以访问ntdll.dll(“内核服务”网关),而不通过Win32(kernel32.dlluser32.dll),但它们现在都已经不再使用了。

所有现代Windows应用程序框架都是建立在Win32上的。其他子系统不再受支持。在某些情况下(驱动程序和引导时系统实用程序,例如chkdsk),代码直接针对本机API编写,但这种情况非常少见。

我对WinRT不是很熟悉,但我认为Win32也适用于它(或者它可能使用Win32和直接的ntdll.dll服务的组合)。

根据Sasha Goldshtein的说法:

接下来,C ++ Metro应用程序仍会加载Win32 DLL,例如kernel32和ntdll。此外,WinRT API调用Win32 DLL - 因此它们不是替代品,而是一个包装器,一个API风格,位于Win32之上。(历史注释:Windows曾经有一个名为“环境子系统”的功能,可以粗略地描述为API风格。WinRT不是环境子系统 - 它是在Win32环境子系统之上的库。)


+1;目前在Windows上没有Win32,你甚至不能创建窗口(你可以使用直接X 绘制,但它不会像其他的窗口一样)。我不知道WinRT,但肯定IE和.NET Framework使用了许多Win32 API(而不仅仅是ntdll)。 - Matteo Italia
这张图并没有错误,只是不适用于 Windows 8 之前的版本。 - Harry Johnston
谢谢!我完全同意你的观点。但是,这篇文章(http://www.winsupersite.com/blog/supersite-blog-39/windows8/winrt-replacing-win32-140605)也让我感到困惑。它声称WinRT取代了Win32。我仍然非常怀疑在Windows版本6.2中是否能够进行如此重大的更改。 - minjang
@minjang:好的,现在更有意义了。Win32有太多的层次了。所以听起来他们保留了最低层(kernel32.dll)以与本地API(ntdll.dll)进行接口,但提供了一个替代的窗口工具包(WPF风格而不是User32/GDI/OpenGL/DirectX)。想知道如何轻松地将Metro UI与传统的winsock网络编程混合使用?可能不太容易,因为user32消息处理通过MsgWaitForMultipleObjectsEx与其他所有内容相当紧密地集成在一起;如果这个函数在Metro上没有使用,那么使用许多Win32 API就会变得棘手。 - Ben Voigt
@minjang:发现了一个更权威的来源。 - Ben Voigt
显示剩余6条评论

1

这个图表(大概)是正确的,但只适用于Windows 8。Windows 8与之前版本有着显著不同的架构。

我相信应用程序可以直接向内核发出请求,但接口大多数情况下是未记录的。设备驱动程序直接使用内核。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接