Windows 10 код исключения 0xc000041d

Необраб. исключение 0xC000041D при обращении к диалогу по HWND

Имеется процедура обработки сообщений диалог бокса. В ней возникла проблема на двух моментах, но похоже проблема в этих моментах общая:

1. SetWindowPos(hwnd, HWND_TOPMOST, 1000, 400, 0, 0, SWP_NOSIZE); в нижеследующем коде. В режиме отладки происходит «Необработанное исключение: 0хC000041D: Во время обратного вызова пользователя обнаружено необработанное исключение».

2. int mItem = TrackPopupMenu (hmenu, TPM_LEFTALIGN | TPM_RETURNCMD, 700, 500, 0, hwnd, 0); Пункты меню (текст в них) не выводятся, выводится пустое меню. При этом информация в этом если кликнуть по этим пустым пунктам, то выполняется нужное действие, то есть, само меню hmenu вроде бы корректно заполнено, оно просто не выводится TrackPopupMenu. При этом если кликнуть по пустым пунктам в режиме отладки, происходит ошибка как и в первом случае — «Необработанное исключение: 0хC000041D: Во время обратного вызова пользователя обнаружено необработанное исключение».

Смахивает на какую-то проблему с hwnd, но в чем может быть проблема, если hwnd это указатель на окно, в обработчике которого я нахожусь?
Самое смешное, что у меня есть откомпиленная и корректно работающая версия, но созданная давненько. Изменений в код вроде бы не вносилось, уж во всяком случае не в эту часть. Наводит на мысли, что в таком случае проблемы могут быть связаны с настройками компилятора или типа того, но с какими настройками.

Hwnd это не указатель и работать с ним нельзя как с указателем.
Версии старая и новая одной разрядности ?

Mira
> Hwnd это не указатель и работать с ним нельзя как с указателем.
Ну да, пардон за терминологию, не помню как точно называется HWND. Но работаю с ним, если ничего не путаю, в точности по MSDN.

Mira
> Версии старая и новая одной разрядности ?
Да, х32 если вы об этом.

>это не указатель и работать с ним нельзя как с указателем.
Большинство хэндлов в винде — это таки замаскированные указатели. И в Win64 (сюрприз, сюрприз!) они 64-битные.
Доказательство (кусок из исходников RTL):

Cheb
да многие хендлы это замаскированные указатили на но не HWND.

ну тут ошибка смазаная надо какието отладочные сигналы вставить в конце функции чтоб узнать до куда она доходит.
непонятно где этот код еще, в длл повешенной через хук?
какое приложение хукнуто?

Читайте также:  Owncloud для windows client

Cheb
> Например, хэндл DLL загруженной, через LoadLibrary — это её allocation base. Я
> широко использую такой трюк чтобы определить имя екзешника для произвольного
> адреса функции:
> function GetModuleByAddr(addr: pointer): THandle;
> var
> Tmm: TMemoryBasicInformation;
> begin
> if VirtualQuery(addr, @Tmm, SizeOf(Tmm)) <> sizeof(Tmm)
> then Result:=0
> else Result:= THandle(Tmm.AllocationBase);
> end;
> потом этот хэндл скармливаю функции GetModuleFileName() — и жрёт, как
> миленький.

не уверен что на защищенных приложухах покатит, на обычных вполне.
там они под код зачастую в рантайме память выделяют и декомпрессят/обфусцируют и так далее

Mira
> ну тут ошибка смазаная надо какието отладочные сигналы вставить в конце функции
> чтоб узнать до куда она доходит.
> непонятно где этот код еще, в длл повешенной через хук?
> какое приложение хукнуто?

Это просто диалогбокс(

PS. При том откомпиленый .ехе работает нормально, надо сказать. И даже в режиме отладки в конфигурации Release.

Кобактан
а почему диалог в каллбеке?

Mira
> а почему диалог в каллбеке?
Согласно МСДН, если я правильно понял вопрос:

«(NTSTATUS) 0xc000041d» ошибка возникает, если щелкнуть ссылку в веб-приложении в Internet Explorer 10 в Windows 8 и Windows Server 2012

Симптомы

Предполагается выполнение веб-приложений в Internet Explorer 10 в Windows 8 или компьютер под управлением Windows Server 2012. Если щелкнуть ссылку в приложение, приложение аварийно завершает работу. Кроме того появляется следующее сообщение об ошибке:

(NTSTATUS) 0xc000041d — необработанное исключение при выполнении обратного вызова пользователя.

Причина

Причиной этой проблемы является исключение указателя null в MSHTML.

Решение

Сведения об обновлении безопасности

Чтобы устранить эту проблему, установите последний накопительный пакет обновления для системы безопасности для Internet Explorer. Для этого посетите следующий веб-узел корпорации Майкрософт:

Это обновление было впервые включено в следующее обновление безопасности:

2838727 MS13-047: Накопительное обновление безопасности для обозревателя Internet Explorer: 11 июня 2013

Дополнительные технические сведения о самых последних накопительное обновление безопасности для обозревателя Internet Explorer находятся на следующих веб-узлах корпорации Майкрософт:

Дополнительные сведения

Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе «Относится к».

Windows 10 код исключения 0xc000041d

Сообщения: 10692
Благодарности: 2884

Конфигурация компьютера
Материнская плата: MSI H61M-P21 (MS-7680) (B3.0)
HDD: WDC Caviar Green WD10EARS-22Y5B1 ATA Device 1Т (1000 Gb), WDC Caviar Blue WD10EZEX-08M2NA0 ATA Device 1Т (1000 Gb)
Звук: VIA VT1708S VIA High Definition Audio
CD/DVD: ATAPI iHAS122 ATA Device
ОС: Microsoft Windows 7 Home Basic x86, Microsoft Windows 10 Home x64 .
Прочее: Multi Flash Reader USB Device, Logitech HD Webcam C310
Читайте также:  Windows server 2016 чистый образ

У Вас Windows 10 Version 15063.

——-
Будь джентльменом, если есть удача. А нет удачи, джентльменов нет . Нажми .

Конфигурация компьютера
ОС: Windows 10 x64

Не совсем, там в записи журнала windows в ошибке фигурирует CompPkgSup.DLL
У меня же запись выглядит так:

Имя сбойного приложения: explorer.exe, версия: 10.0.15063.0, метка времени: 0xa25b6083
Имя сбойного модуля: windows.storage.dll, версия: 10.0.15063.0, метка времени: 0x0091e5d2
Код исключения: 0xc000041d
Смещение ошибки: 0x000000000007e0ce
Идентификатор сбойного процесса: 0x2380
Время запуска сбойного приложения: 0x01d2afa4813cf6e1
Путь сбойного приложения: C:\WINDOWS\explorer.exe
Путь сбойного модуля: C:\WINDOWS\System32\windows.storage.dll
Идентификатор отчета: 1c6aebb2-22f5-4288-8ae0-7ff02e8c4cfb
Полное имя сбойного пакета:
Код приложения, связанного со сбойным пакетом:

Ошибка возникает к примеру при сохранении файлов в браузере, либо сохранении файла в том же notepad++, в параметрах windows и т.д. Так в работе ноутбук ведет себя хорошо, но стоит только начать сохранять к примеру .psd в photoshop, то сразу моргает экран на секунду, перерисовываются иконки, и в журнале появляется запись о ошибке описанной выше, очень напрягает.

Сообщения: 51908
Благодарности: 14931

Windows 10 код исключения 0xc000041d

Общие обсуждения

  • Изменен тип Petko Krushev Microsoft contingent staff, Moderator 30 марта 2020 г. 7:24

Все ответы

а что за приложения?

пятая ошибка часто означает проблемы с доступом (хоть и не всегда), 41d упоминают в этой первой ссылке из гугла

Читайте также:  Зачем нужен кали линукс

обновы на сервер установлены? приложения с сервером совместимы?

The opinion expressed by me is not an official position of Microsoft

Обновы на сервер ставлю регулярно — сейчас стоит максимально обновленная версия.

Из наиболее распространенных приложений — могу назвать вот эти 2 с частыми ошибками:

Платформа 1C — На сайте производителя заявлено, что поддерживается платформа Windows Server 2016

Программное обеспечение принтера Xerox — заявлено, что поддерживает серверные ОС Windows Server

Ошибка

Вылетает игра с такой ошибкой

Имя сбойного модуля: VCRUNTIME140.dll, версия: 14.0.23026.0, метка времени: 0x558ce2ff
Код исключения: 0xc0000005
Смещение ошибки: 0x000000000000ca10
Идентификатор сбойного процесса: 0x22f8
Время запуска сбойного приложения: 0x01d28ac2ff6e2a48
Путь сбойного модуля: C:\WINDOWS\SYSTEM32\VCRUNTIME140.dll
Идентификатор отчета: ded8ef32-e576-4956-bd48-c22bb5a02c4a

Что мне делать, чтобы исправить это?

Ошибка 0xc0000005 — это критическое нарушение прав доступа, требующее немедленного внимания. Как правило, сообщение об этой ошибке появляется, когда вы пытаетесь запустить одну из программ на операционной системе Windows.

Типичными причинами ошибки нарушения доступа 0xC0000005 являются: повреждения реестра, вредоносные программы, неисправность оперативной памяти или драйверов устройств, некорректно установленные или обновлённые программы и даже средства безопасности Windows.

Для начала, рекомендую просканировать компьютер на наличие вирусов.

Откройте командую стоку от имени администратора и впишите команду Chkdsk /f /r . Проверка диска должна начаться после того как Вы перезагрузите Ваш ПК.

Важные диагностики , которые тоже следует запустить :

Вы можете также попробовать откатить систему к точке восстановления , до того как появилась ошибка .

Этот параметр позволяет вернуть компьютер в состояние , зарегистрированное в определенный момент в прошлом , к так называемой точке восстановления системы . Точки восстановления создаются при установке нового приложения , драйвера или обновления Windows. Вы также можете создать точку восстановления вручную . Восстановление не затронет личные файлы , но приложения , драйверы и обновления , установленные после создания точки восстановления , будут удалены .

Щелкните правой кнопкой мыши ( или нажмите и удерживайте ) кнопку » Пуск «, а затем выберите Панель управления .

На Панели управления найдите Восстановление .

Выберите Восстановление > Запуск восстановления системы > Далее .

Выберите точку восстановления , связанную с проблемным приложением , драйвером или обновлением , а затем выберите Далее > Готово .

Если вы не видите точек восстановления , это может означать , что защита системы не включена . Чтобы проверить , перейдите на Панель управления , найдите Восстановление и выберите Восстановление > Настройка восстановления системы > Настроить и убедитесь , что выбрано Включить защиту системы .

Оцените статью