gpt4 book ai didi

c++ - 如何查看应用程序运行的系统是否有所需的Windows API函数?

转载 作者:行者123 更新时间:2023-11-28 04:17:29 24 4
gpt4 key购买 nike

我想使用一些特定于最新 Windows 10 版本的 Windows API 函数。例如。像CreatePseudoConsole()这样的功能配套Windows Pseudo Console (ConPTY)仅在 Windows 10 版本 1809(2018 年发布的 Windows 10 秋季更新)中引入。

  • 经典的方法是加载实现所需功能的Windows内核动态库(使用LoadLibrary()函数)并通过GetProcAddress()检查每个需要的功能。打电话。
  • Visual C++ 6.0 中引入的新方法称为 Delay Loading .

是否有任何现代(简单、清晰和透明)的方法来检查 Windows API 的哪些部分可用于正在运行的应用程序?或者它是一种检查应用程序运行的确切 Windows 10 版本的方法吗?我想仅在它们可用时才使用像 CreatePseudoConsole() 这样的函数(如果它们不可用,则应执行一些其他代码)。

最佳答案

GetProcAddress() 是完成您要求的唯一方法。绝对不要依赖于检测操作系统版本(在最近的 Windows 版本中,可靠地做到这一点变得越来越困难),而是依赖于所需功能是否实际存在。

即使是链接器的 delay-load feature在内部使用 GetProcAddress()。在这种情况下,您可以使用 delay-load notification hook以确定加载的结果,以便您可以相应地标记您的代码以供以后检查,或者甚至在需要时提供指向备用回退函数的指针。

这最后一部分很重要,因为一个延迟加载的函数只有在第一次被调用时才会加载,所以如果你调用了一个在运行时不存在的延迟加载函数,并且通知钩子(Hook)不提供作为替代函数,您的代码可能会在尝试通过 NULL 指针执行函数时崩溃。为避免这种情况,您可以在调用函数之前显式调用 GetProcAddress()

关于c++ - 如何查看应用程序运行的系统是否有所需的Windows API函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com