涉及的更新是: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
不行!
唯一的区别是已安装的更新。
问题是:
- 这是一个错误吗?
- 资源怎么可能存在,名称正确,格式正确而失败?
- 是什么改变了它,首先是让它工作的错误吗?
- 我如何向Microsoft报告?
由于在评论中不容易清除,因此我将其作为答案发布。
我做了测试来重现这个问题,发现它只与"KB4528760更新"有关(你不需要卸载它们(。
我使用EnumResourceTypes
,EnumResourceNames
来获取资源确实存在:
名称 =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;
}