【问题标题】:What are "api-ms-win-*-*-lx-x-x.dll" umbrella libraries?什么是“api-ms-win-*-*-lx-x-x.dll”伞库?
【发布时间】:2018-05-11 18:20:48
【问题描述】:

因此,我不断遇到具有长文件名的 DLL。例如只有两个:"api-ms-win-appmodel-runtime-l1-1-1.dll""api-ms-win-appmodel-identity-l1-2-0.dll"。显然微软称他们为“umbrella libraries”。

我最初的理解是它们只是具有新文件名的新 D​​LL,但后来我尝试搜索这些文件。好吧,我在磁盘上找不到它们作为物理文件...

所以我很好奇,它们是不是磁盘上不存在的某种虚拟 DLL 文件名?

WCHAR buff[MAX_PATH];
buff[0] = 0;
GetSystemDirectory(buff, MAX_PATH);
StringCchCat(buff, MAX_PATH, L"\\api-ms-win-appmodel-runtime-l1-1-1.dll");

HMODULE hModule = LoadLibrary(buff);
//'hModule' is NULL & error code is ERROR_MOD_NOT_FOUND

但以下工作:

HMODULE hModule = LoadLibrary(L"api-ms-win-appmodel-runtime-l1-1-1.dll");

【问题讨论】:

    标签: c++ winapi dll uwp


    【解决方案1】:

    这是“虚拟 DLL”名称。加载程序,当我们调用 LoadLibrary (LdrLoadDll) 检查众所周知的名称前缀(比如 api- ),如果名称以此开头 - 使用 ApiSetSchema mechanism 将虚拟 dll 名称(即 api-ms-win.. )转换为真实 dll名称(文件名,如kernel32.dllkernelbase.dll 等)。此映射在 system32 文件夹中的 ApiSetSchema.dll 中实现。

    关于内部实现 - 阅读 Runtime DLL name resolution: ApiSetSchema - Part II The API Set Schema

    【讨论】:

    • 为了与旧系统兼容,有时会发现这些 API 集库作为转发到实现 DLL 的真实 DLL。
    • @eryksun - 认为这仅适用于 win8.1。在这里,我们真的找到了这个 dll。说在 system32 中存在 api-ms-win-appmodel-identity-l1-2-0.dll。和这个 dll 导出功能。但它没有实现它或转发到实际实现,而只是返回0。在win 10中,system32中不存在任何api-*文件
    • 此类 DLL 存在于 Windows 7 和 8 上,用于通用 CRT API 集 api-ms-win-crt-*.dll。这些 CRT DLL 在 Windows 10 中是虚拟的。无论哪种情况,它们都是由 ucrtbase.dll 实现的。
    • @eryksun:谢谢你们。我将查看此处链接的文章。但在此之前,我很好奇,如果我在自己的文件夹中创建一个同名的 DLL 并尝试像这样加载它:LoadLibrary(L"api-ms-win-appmodel-runtime-l1-1-1.dll")?奇怪的是,他们决定仅通过 DLL 名称与文件清单中的一些特殊 GUID 值来确定“虚拟性”,就像他们对其他事情所做的那样。 Plus 完全没有在 MSDN 主页面中为LoadLibrary 记录它。
    • @c00000fd - LdrLoadDll 在开始调用内部函数 ApiSetResolveToHost 时检查 dll 路径(确切的路径,不仅仅是名称)从 api-EXT- 开始,如果是(区分大小写) - 调用 ApiSetpSearchForApiSet 尝试重定向 dll 名称。如果此名称将被重定向 - 将使用重定向的名称。但是如果在 apiset 中找不到名称 - 该名称将继续按原样使用,并且如果具有此名称的 dll 确实存在于磁盘上 - 它将照常加载
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多