Источник windows error reporting код события 1001. Раскрывая тайны Windows: как работает служба регистрации ошибок? Использование механизма Windows Error Reporting

Источник windows error reporting код события 1001. Раскрывая тайны Windows: как работает служба регистрации ошибок? Использование механизма Windows Error Reporting
Источник windows error reporting код события 1001. Раскрывая тайны Windows: как работает служба регистрации ошибок? Использование механизма Windows Error Reporting

Отчет об ошибках включен по умолчанию в XP, Vista, и Windows 7. Когда в приложении происходит ошибка появляется детальное описание данной ошибки и вам предлагается отправить данную информацию в Microsoft. Данная информация получается с миллионов ПК во всем мире и помогает в создании патчей и сервис паков. В некоторых случаях самостоятельный разбор информации об ошибки помогает в решении проблемы. Однако в некоторых случаях данное поведение системы не допустимо и вам хотелось бы отключить данный функционал. В данной статьте мы и рассмотрим методы отключения отчета об ошибках во всех системах.

Windows 7

Откройте стартовое меню и введите в поисковую строку problem reporting settings , или перейдите в Action Center -> Change Action Center Settings -> Problem Reporting Settings. Если вы использовали метод поиска, выберите пункт “Choose how to report problems”:

Затем вы можете легко выбрать нужную вам опцию из списка.

Отключение отчета об ошибках в Windows 7 с помощью групповых политик

Замечание: Данный метод недоступен для домашних версий Windows 7.

Нажмите Start и введите gpedit.msc в строке поиска и нажмите Enter.

Откроется редактор локальной групповой политики. Далее вам нужно перейти в раздел User Configuration \ Administrative Templates \ Windows Components \ Windows Error Reporting и зайти в политику Disable Windows Error Reporting .

Смените состояние политики с Not Configured на Enabled, затем нажмите Apply и Ok и выйдите из редактора групповой политики.

Отключение отчета об ошибках в Vista

Для отключения отчета об ошибках в Vista нажмите на Start и откройте панель управления (Control Panel).

Переведите панель управления в классический режим отображения и нажмите на Problem Reports and Solutions.

Как вы можете видеть нам предлагается две опции. Если вы выберете Ask me to check if a problem occurs , отчет об ошибках будет включен и вам будет предложен выбор посылать информацию в Microsoft или нет. Если вы выберете Check for solutions automatically (recommended) все данные будут отправляться в Microsoft автоматически. Оба варианта нам не подходят, так как мы хотим полностью отключить данный функционал, поэтому нажмем ссылку Advanced Settings .

В появившемся окне в разделе For my programs, problem reporting is… выберите Off и затем нажмите Ok.

Как вы теперь видите предыдущие опции недоступны для редактирования.

Нажмите Close в сообщении, сообщающем нам о том, что отчет об ошибках отключен.

Отключение отчета об ошибках в XP

Для отключения отчета об ошибках в XP нажмите правой кнопкой на иконке "Мой компьютер " и выберите Свойства . В открывшемся окне перейдите на вкладку Дополнительно и нажмите кнопку Отчет об ошибках.

В открывшемся окне выберите опцию Disable error reporting . Снимите флажок с опции But notify me when critical error occur .

Задумались где купить хорошую и недорогую одежду для ребенка. Рекомендую детский сток интернет-магазин с огромным выбором и низкими ценами.

Это статья по мотивам вопросов на форумах: "Как мне вернуть строку из DLL?", "Как передать и вернуть массив записей?", "Как передать в DLL форму?".

Чтобы вам не тратить половину жизни на разобраться - в этой статье я принесу всё на блюдечке.

Темы этой статьи в разной степени уже не раз затрагивались в этом блоге, но в этой статье они собраны в кучу, приведены обоснования. Короче, ссылкой на эту статью можно кидаться в тех, кто разрабатывает DLL.

Важное примечание : статью нужно читать последовательно . Примеры кода приводятся только как примеры , на каждом шаге (пункте) статьи код примеров добавляется новыми подробностями. Например, в самом начале статьи нет обработки ошибок, указываются "классические" способы (типа, использования GetLastError , соглашения sdtcall и т.д.), которые по ходу статьи заменяются на более адекватные. Сделано так по той причине, чтобы "новые" ("необычные") конструкции не вызывали вопросов. Иначе при пришлось бы к каждому примеру вставлять примечание вида: "вот это обсуждается в том пункте ниже, а вот то - в этом вот". В любом случае в конце статьи есть ссылка на уже готовый код, написанный с учётом всего сказанного в статье. Можете просто его брать и использовать. А статья объясняет зачем и почему. Если вам не интересно "зачем и почему" - листайте в конец к заключению и ссылке на скачивание примера.

Перестаёт работать или работает некорректно), Windows создает отчёт о проблеме, который предназначен для отправки в Microsoft (чтобы отыскать решение проблемы).

Начиная с операционной системы , на смену «инструменту анализа сбоев или аварий» Dr. Watson пришла Windows Error Reporting (WER ) – Служба регистрации ошибок Windows (другие названия – , Отчеты о проблемах и решения ).

Служба регистрации ошибок Windows представлена следующими файлами (все расположены в каталоге \Windows\System32\ ):

wer.dll (Библиотека сообщений об ошибках Windows );

wercon.exe (Отчеты о проблемах и их решениях );

wercplsupport.dll ();

werdiagcontroller.dll (WER Diagnostic Controller );

WerFault.exe (Отчет об ошибках Windows );

WerFaultSecure.exe (Отчеты об ошибках Windows );

wermgr.exe (Windows Problem Reporting );

wersvc.dll (Служба регистрации ошибок Windows );

wertargets.wtl .

Когда происходит сбой какого-либо процесса (программы), служба Windows Error Reporting запускает – в сеансе ошибочного процесса – свою (WerFault.exe ),

передавая идентификатор (PID ) процесса в командную строку WerFault :

При этом отображается окно Microsoft Windows с сообщением об ошибке – «Прекращена работа <Название_программы>. При следующем подключении к Интернету Windows может провести поиск способа устранения этой ошибки» :


При нажатии на кнопку Показать подробности проблемы можно ознакомиться с сигнатурой проблемы:


Сигнатуры проблем сохраняются в отчётах об ошибках, которые хранятся в каталоге \Users\Master\AppData\Local\Microsoft\Windows\WER\ReportArchive\ , каждый отчет – в отдельной папке Report******** (например, Report0a003e48 ), в файле Report.wer .

Примерное содержимое файла Report.wer :

Version=1

EventType=APPCRASH

EventTime=129234418886148269

ReportType=2

Consent=1

Response.type=4

Sig.Name=Имя приложения

Sig.Value=iexplore.exe

Sig.Name=Версия приложения

Sig.Value=8.0.6001.18928

Sig.Name=Штамп времени приложения

Sig.Value=4bdfa327

Sig.Name=Имя модуля с ошибкой

Sig.Value=mshtml.dll

Sig.Name=Версия модуля с ошибкой

Sig.Value=8.0.6001.18928

Sig.Name=Штамп времени модуля с ошибкой

Sig.Value=4bdfb76d

Sig.Name=Код исключения

Sig.Value=c0000005

Sig.Name=Смещение исключения

Sig.Value=000da33f

DynamicSig.Name=Версия ОС

DynamicSig.Value=6.0.6002.2.2.0.768.3

DynamicSig.Name=Код языка

DynamicSig.Value=1049

DynamicSig.Name=Дополнительные сведения 1

DynamicSig.Value=fd00

DynamicSig.Name=Дополнительные сведения 2

DynamicSig.Name=Дополнительные сведения 3

DynamicSig.Value=fd00

DynamicSig.Name=Дополнительные сведения 4

DynamicSig.Value=

UI=C:\Program Files\Internet Explorer\iexplore.exe

UI=Прекращена работа Internet Explorer

UI=Windows может провести поиск способа устранения этой ошибки в Интернете.

UI=Искать решение проблемы в Интернете и закрыть программу

UI=Проверить наличие способа исправления ошибки в Интернете позднее и закрыть программу

UI=Закрыть программу

FriendlyEventName=Остановка работы

ConsentKey=APPCRASH

AppName=Internet Explorer

AppPath=C:\Program Files\Internet Explorer\iexplore.exe

Как запустить службу Отчеты о проблемах и их решениях

Нажмите Пуск –> Панель управления –> Отчеты о проблемах и их решениях ;


– в окне Отчеты о проблемах и их решениях в меню Задачи доступны следующие опции:

· Искать новые решения (необходимо открытое соединение с Интернетом);

В предыдущей статье данного цикла, посвященной механизму Application Restart and Recovery, мы упомянули механизм Windows Error Reporting (WER). О нем и пойдет речь в настоящей статье данного цикла

В предыдущей статье данного цикла, посвященной механизму Application Restart and Recovery, мы упомянули механизм Windows Error Reporting (WER). О нем и пойдет речь в настоящей статье данного цикла.

Механизм Windows Error Reporting

С помощью механизма Windows Error Reporting (WER) можно собирать данные об ошибках, происходящих в приложениях, и либо отсылать эту информацию на специальный сайт Microsoft (сайт http://winqal.microsoft.com), либо сохранять ее локально. Сбор детальной информации об ошибках и сбоях помогает в устранении недостатков приложений, коррекции ошибок, упрощает выпуск пакетов обновлений и новых версий приложений, обеспечивает общую стабильность и надежность как самих приложений, так и операционной системы.

Отметим, что компания Microsoft сама активно использует механизм Windows Error Reporting как в процессе разработки, так и после выпуска продуктов на рынок. Так, продуктовая группа Microsoft Office исправила 50% ошибок в Office Service Pacl 2, продуктовая группа Visual Studio - 74% ошибок в Beta 1 Visual Studio 2005, 29% ошибок в Windows XP было исправлено в Windows XP Service Pack 1. В настоящее время более 2 тыс. компаний применяют сервисы Windows Error Reporting для улучшения качества своих приложений.

Механизм Windows Error Reporting впервые появился в Windows XP, был существенно расширен в Windows Vista и получил дальнейшее развитие в Windows Server 2008, Vista Service Pack 1 и Windows 7 и Windows Server 2008 R2. Так, на уровне Windows Vista у разработчиков появилась возможность не только получать информацию о сбоях, произошедших в приложениях, но и данные о производительности. Теперь можно более гибко создавать, настраивать и отсылать отчеты о проблемах, улучшились средства онлайнового анализа данных и упростился механизм коммуникаций с пользователями - через механизм Problem Reports and Solutions (в Windows Vista - Start -> Control Panel -> System and Maintenance -> Problem Reports and Solutions -> View Problem History ) и Action Center (в Windows 7). Затем в Windows Server 2008 и Vista Service Pack 1 появилась возможность создания локальных дампов, а в Windows 7 и Windows Server 2008 R2 добавлена возможность генерации исключений, которые не будут обрабатываться традиционными обработчиками и будут приводить к немедленному завершению приложения и автоматическому запуску механизма Windows Error Reporting, а также возможность задания внешнего процесса - обработчика исключений, который будет вызываться для получения названия события, параметров отчета об ошибке и опционального запуска отладчика.

Использование механизма Windows Error Reporting

Давайте кратко рассмотрим, как разработчики могут применять механизм Windows Error Reporting для получения информации о сбоях и других проблемах со своими приложениями. Начиная с Windows Vista Windows по умолчанию предоставляет отчет о сбоях, зависаниях и ошибках уровня ядра операционной системы (kernel faults) для всех приложений - внесения изменений в код приложений не требуется. При необходимости отчет включает мини-дамп памяти и дамп «кучи» приложения, приложениям требуется использование программных интерфейсов в тех случаях, когда необходима отсылка какой­то специфической для приложения дополнительной информации. Поскольку ядро Windows автоматически собирает в отчет информацию о необработанных исключениях, приложениям не нужно обрабатывать исключения, приводящие к фатальным ошибкам.

В случае возникновения сбоев, зависаний или ошибок уровня ядра операционной системы механизм Windows Error Reporting выполняет следующую последовательность действий:

  1. Возникновение проблемы.
  2. Ядро операционной системы вызывает WER.
  3. WER собирает данные, создает отчет и, при необходимости, запрашивает от пользователя подтверждение на отсылку отчета.
  4. При получении подтверждения WER отсылает отчет в Microsoft (так называемый Watson Server).
  5. Если серверу требуются дополнительные данные, WER собирает их и, при необходимости, запрашивает от пользователя подтверждение на отсылку.
  6. Если приложение зарегистрировано для перезапуска (эту тему мы обсуждали ранее), то WER выполняет соответствующую косвенно вызываемую функцию приложения.
  7. Если существует решение проблемы, приведшей к сбою, пользователь получает уведомление с помощью соответствующих средств операционной системы.

В зависимости от ситуации в CAB-файле могут присутствовать различные типы дампов, которые можно различать по расширению имени файла (табл. 1).

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

Для включения в состав отчета файла применяется функция WerRegisterFile(), которой в качестве параметров передаются: полное имя файла, его тип (одно из значений WER_REGISTER_FILE_TYPE) и два флага: WER_DELETE_FILE_WHEN_DONE, указывающий на то, что файл должен быть удален после отсылки отчета, и WER_ANONYMOUS_ DATA, указывающий на то, что в файле не содержатся приватные данные. Возможные значения параметра WER_REGISTER_FILE_ TYPE приведены в табл. 2 .

Отметим, что задача генерации дампа памяти возлагается на разработчика приложения - для ее решения можно применять, например, отладочные механизмы, описанные в Windows SDK (см. функцию MiniDumpWriteDump()).

Для исключения файла из отчета следует использовать функцию WerUnRegisterFile(), указав ей в качестве параметра имя исключаемого файла.

В большинстве сценариев отсылка дополнительных файлов происходит только при получении от сервера соответствующего запроса. В случае отсылки дополнительных файлов необходимо применять флаг WER_ADD_ REGISTERED_DATA при вызове функции WerReportSubmit() - о ней мы расскажем далее.

Для включения в состав отчета копии области памяти применяется функция WerRegisterMemoryBlock(), в качестве параметров которой передаются адрес начала включаемого блока памяти и размер этого блока в байтах (максимальный размер блока памяти - WER_MAX_MEM_BLOCK_SIZE). Для отмены включения копии области памяти в отчет следует применять функцию WerUnRegisterMemoryBlock(). В случае отсылки данных из памяти необходимо использовать флаг WER_ADD_REGISTERED_DATA при вызове функции WerReportSubmit().

Функции WerSetFlags() и WerGetFlags() могут применяться соответственно для управления состоянием процесса в момент генерации отчета об ошибках и получения информации о настройках.

Процесс генерации и отсылки отчета состоит из нескольких шагов. Инициализация отчета выполняется вызовом функции WerReportCreate(), с помощью которой указывается тип события, для которого создается отчет, тип отчета (WerReportNonCritical - для сбоев с возможностью восстановления и WerReportCritical - для сбоев, повлекших аварийное завершение приложения), ссылка на информацию, включаемую в отчет (см. структуру WER_REPORT_INFORMATION), и переменная, которая будет содержать ссылку на созданный отчет, - ReportHandle.

После того как отчет успешно инициализирован, необходимо добавить в него парамет­ры первой и второй групп. Параметры первой группы задаются с помощью функции WerReport-Set-Parameter(), которой передается ссылка на созданный отчет (результат успешного выполнения функции WerReportCreate), набор флагов, имя параметра и его значение (16-битная строка в Unicode, заканчивающаяся нулем).

Для включения в состав отчета дополнительных параметров применяется функция WerReportAddSecondaryParameter(), которой передается ссылка на отчет, имя параметра и его значение.

Помимо возможности включения в состав отчетов файлов и снимков областей памяти, предусмотрена передача в составе отчета и дампов памяти - для этого можно использовать функцию WerReportAddDump(), в качестве параметров которой указываются ссылка на отчет, ссылки на процесс и поток, для которых был создан дамп, тип дампа (одно из значений WER_DUMP_TYPE), информация об исключении (указатель на структуру типа WER_EXCEPTION_INFORMATION), дополнительные опции (тип данных WER_DUMP_CUSTOM_OPTIONS) и флаги. Отметим, что процесс, для которого создается дамп, должен иметь права доступа STANDARD_RIGHTS_READ и PROCESS_QUERY_INFORMATION.

Для включения в состав отчета файлов мы применяем функцию WerReportAddFile(), которой передаем ссылку на отчет, полное имя файла, тип файла (WER_FILE_ TYPE) и дополнительные флаги.

Помимо этого разработчикам предоставляется возможность настройки пользовательского интерфейса - выбора информации, отображаемой в системной диалоговой панели. Для этих целей служит функция WerReportSetUI Option(), которой передается ссылка на отчет, тип интерфейса отчета (WER_REPORT_UI) и значение отображаемой строки. Приложение может модифицировать любое из полей интерфейсного элемента, заданного параметром WER_REPORT_UI; каждый вызов функции позволяет модифицировать только одно поле. Функция WerReportSetUIOption() может вызываться в любой момент работы приложения до непосредственной отсылки отчета.

После того как отчет сформирован и настроен, мы используем функцию WerReportSubmit() для отсылки отчета. В качестве параметров этой функции передаются ссылка на отчет, тип пользовательского интерфейса (наличие прав администратора, подтверждение отсылки и т.п.) и набор флагов. После того как отчет послан, следует закрыть ссылку на него, используя функцию WerReportCloseHandle().

Для отключения приложения от механизма Windows Error Reporting следует использовать функцию WerAddExcludedApplication(), а для повторного подключения - функцию WerRemoveExcludedApplication().

Настройки Windows Error Reporting располагаются в двух ветвях реестра:

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting;
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting.

Наиболее полезные настройки показаны в табл. 3 .

Заключение

В данном цикле статей мы обсудили различные вопросы улучшения стабильности работы приложений. Мы рассмотрели технику, позволяющую избежать утечки памяти, предотвратить зависание приложений, обсудили использование механизма Application Restart and Recovery, позволяющего перезапускать приложения, которые либо заблокировали какие­то ресурсы, либо перестали реагировать на сообщения системы, и механизма Windows Error Reporting, который дает возможность собирать данные о сбоях, происходящих в приложениях.

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