将Windows 10更新为Fall Creators Update后,我在CreateWindowEx
中遇到间歇性故障。 GetLastError
返回0x000003e6 - ERROR_NOACCESS /无效访问内存。经常(但并非总是如此),只需使用完全相同的参数重复调用即可。
hwnd = ::CreateWindowEx(0, wndClassName, NULL, WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, r.left, r.top, r.right, r.bottom, hParent, NULL, AfxGetInstanceHandle(), NULL);
wndClassName
是在此次通话中注册的wndClass
的名称:
LPCSTR wndClassName = /* clsName passed in */;
WNDCLASS wndcls;
HINSTANCE hInst = AfxGetInstanceHandle();
if (!(::GetClassInfo(hInst, wndClassName, &wndcls)))
{
ZeroMemory(&wndcls, sizeof(wndcls));
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.hCursor = ::LoadCursor(nullptr, IDC_ARROW);
wndcls.hInstance = hInst;
wndcls.lpszClassName = wndClassName;
wndcls.hbrBackground = (HBRUSH)::GetStockObject(NULL_BRUSH);
AfxRegisterClass(&wndcls);
}
MSDN文档指出失败的典型原因之一是
安装了WH_CBT挂钩并返回失败代码
我的应用确实使用MFC,我相信MFC依赖于CBT钩子。
有关如何调查和解决使用Fall Creators Update开始发生的持续性间歇性故障的任何想法?
答案 0 :(得分:3)
这是Windows 10 Fall Creators Update错误,已在12月12日发布的Win10 FCU Update KB4054517中修复。
该错误影响了在64位版本的Windows 10 Fall Creators Update上运行的32位大地址识别应用程序。当内核无法使用低于0x80000000的足够内存时,CreateWindowEx失败。
出于纪录目的,这些是我们为了解问题而采取的行动: