为什么Windows使我们在某些API中指定结构的大小?

在一些windows APIs中,例如Module32NextModule32FirstProcess32NextThread32Next等,程序员被迫将结构的dwSize字段设置为结构的大小。 为什么Windows让我们这样做? 这些结构不是由Windows自己定义的吗? 大小不是已知的常数?

PS:我看着这些函数,发现他们只是检查大小是否等于一个硬编码的常量。

有关Thread32First函数的官方信息说 :

Thread32First将dwSize更改为写入结构的字节数。 这将永远不会比dwSize的初始值大,但可能会更小。 如果值较小,则不要依赖偏移大于此值的任何成员的值。

我明白,通过在dwSize指定一个值,我们告诉Windows,我们不需要其他“偏移大于这个值的成员”

(编辑)经过一些测试,我相信现在正确的答案是从哈利约翰斯顿的。

通过要求程序员指定结构的大小,Windows可以知道程序员正在使用哪种版本的结构。 一些这样的结构实际上已经在不同版本的Windows之间改变了,有些则没有 – 但是提供这个大小意味着微软可以选择在需要的时候改变它,而不会破坏现有的应用程序。