LoadImage 在 Windows 更新后停止工作



涉及的更新是:KB4532938和KB4528760

这是代码:

#include "pch.h"
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
HMODULE hInst;
HANDLE hImg = NULL;
hInst = LoadLibrary(L"C:\Users\asd\Desktop\asd\test.exe");
hImg = LoadImageW(hInst, MAKEINTRESOURCEW(5234), 2, 0, 0, 0);
if (!hImg)
cout << GetLastError() << endl;
cout << hImg;
}

这是包含光标的.exe(它是一个空白的ahk脚本(

更新之前:

输出:非空句柄和错误代码 1813

它有效!

更新后:

输出:句柄和错误代码 1813

不行!

唯一的区别是已安装的更新。

问题是:

  1. 这是一个错误吗?
  2. 资源怎么可能存在,名称正确,格式正确而失败?
  3. 是什么改变了它,首先是让它工作的错误吗?
  4. 我如何向Microsoft报告?

由于在评论中不容易清除,因此我将其作为答案发布。

我做了测试来重现这个问题,发现它只与"KB4528760更新"有关(你不需要卸载它们(。

我使用EnumResourceTypesEnumResourceNames来获取资源确实存在:

名称 =MAKEINTRESOURCE(5234),类型 =RT_ANICURSOR

使用FindResource并指定要RT_ANICURSOR工作的资源类型。

#include "pch.h"
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
HMODULE hInst;
HANDLE hImg = NULL;
hInst = LoadLibrary(L"C:\Users\asd\Desktop\asd\test.exe");
HRSRC hResInfo = FindResource(hInst, MAKEINTRESOURCE(5234), RT_ANICURSOR);
hImg = LoadResource(hInst, hResInfo);
if (!hImg)
cout << GetLastError() << endl;
cout << hImg;
}

最新更新