我最近在MoleBox打包的可执行文件上修复了一些IAT,并且看到它与kernel32函数链接:“_lopen”,“_lwrite”和“_lread”。 本网站声明,这些API的提供与16位版本的Windows的兼容性。 我不喜欢“Win16”应用程序不能在长时间模式下执行(是的 – 我正在运行Win8.1 x64) – 那么这些仍然包含在'kernel32.dll'中的目的是什么?
顺便说一下这些函数甚至不包含在“msdn”库中。
编辑:这似乎也是那些function实际上不是16位! 他们正在堆栈上采取32位参数。
这不是功能可以被16位应用程序调用。 显然他们不能,因为他们生活在32位和64位模块。 重点是让开发人员更容易编译旧程序,而无需重新编写旧程序。
现在,在2015年,并不需要满足那些有16位程序的开发者的需求。 这可能不会再有任何重大的发展。 但如果你倒退20年,那么这是一个真正的问题。 因此,MS包括这些compat拐杖。 而且一旦被包括在内,那么MS可能决定把它们留在那里,以免破坏二进制兼容性。 MS确实竭尽全力避免破坏旧程序。 如果这些功能被删除,任何依赖它们的程序都会中断。
微软不会因为“旧”而删除函数。 他们会尽快删除这些功能,但是现在需要更少的工作来保存它们。