【发布时间】:2019-04-06 03:57:48
【问题描述】:
不同版本的操作系统上相同的系统调用 ID 值负责调用不同的内核函数。那么当我们在 Windows 7 上使用 Windows XP 时代使用的可执行文件时,为什么整个应用程序可以正常工作?
【问题讨论】:
-
使用 NT API 的应用程序不进行直接系统调用。它们链接到系统库中的存根函数,该函数反过来进行系统调用,例如由 ntdll.dll 导出的
Nt前缀函数以及由 win32u 导出的NtUser和NtGdi前缀函数。 dll(以前的 user32.dll)。有等效的Zw前缀导出,但在用户模式下,它们之间没有区别,并且首选使用Nt名称。 -
也就是说,除非应用程序有充分的理由(例如,它是与驱动程序紧密耦合的用户模式服务),否则我认为它应该更喜欢 Windows API 而不是低级系统调用。 IMO,如果
CreateFileW完成了这项工作,那么就使用它。仅在绝对必要时使用NtCreateFile或NtOpenFile。
标签: windows system-calls