Error reporting можно ли удалить. Раскрывая тайны Windows: как работает служба регистрации ошибок? Отключение отчета об ошибках в Vista

1 Структурная схема алгоритма криптографического преобразования 1

2 Режим простой замены 4

3 Режим гаммирования 8

4 Режим гаммирования с обратной связью 11

5 Режим выработки имитовставки 14

Приложение 1 Термины, применяемые в настоящем стандарте, и их определения 16

Приложение 2 Значения констант С1, С2 18

Приложение 3 Схемы программной реализации алгоритма криптографического

преобразования. 19

Приложение 4 Правила суммирования по модулю 2 32 и по модулю (2 32 -I) 25

ГОСУДАРСТВЕННЫЙ СТАНДАРТ

СОЮЗА ССР

СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ. ЗАШИТА КРИПТОГРАФИЧЕСКАЯ

Алгоритм криптографического преобразования

Дата введения 01.07.90

Настоящий стандарт устанавливает единый алгоритм криптографического преобразования для систем обработки информации в сетях электронных вычислительных машин (ЭВМ), отдельных вычислительных комплексах и ЭВМ, который определяет правила шифрования данных и выработки имитовставки.

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

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

Термины, применяемые в настоящем стандарте, и их определения приведены в приложении 1.

I. СТРУКТУРНАЯ СХЕМА АЛГОРИТМА КРИПТОГРАФИЧЕСКОГО ПРЕОБРАЗОВАНИЯ

1.1. Структурная схема алгоритма криптографического преобразования (криптосхема) содержит (см.черт. 1):

Издание официальное ★

ключевое запоминающее устройство (КЗУ) на 256 бит, состоящее из восьми 32-разрядных накопителей (Х 0 , X t . Х 2 , A3 Л4, Х$, Х 6 , Ху); четыре 32-разрядных накопителя (/V (, N 2 , Nj, /V 4);

Перепечатка воспрещена

© Издательство стандартов, 1989 © ИПК Издательство стандартов, 1996

два 32-разрядных накопителя Л/$,) с записанными в них постоянными заполнениями С 2 , С\\

два 32-разрядных сумматора по модулю 2 32 (СМ|, СЛ/3);

32-разрядный сумматор поразрядного суммирования по модулю 2 (СЛ/ 2);

32-разрядный сумматор по модулю (2 32 - 1) (СЛ/ 4);

сумматор по модулю 2(СЛ/ 5), ограничение на разрядность сумматора СЛ/$ не накладывается;

блок подстановки (А);

регистр циклического сдвига на одиннадцать шагов в сторону старшего разряда (R).

1.2. Блок подстановки А" состоит из восьми узлов замены A’j,

А 2 , А“з, К 4 , А5, А7, А 8 с памятью на 64 бита каждый. Посту

пающий на блок подстановки 32-разрядный вектор разбивается на восемь последовательно идущих 4-разрядных векторов, каждый из которых преобразуется в 4-разрядный вектор соответствующим узлом замены, представляющим собой таблицу из шестнадцати строк, содержащих по четыре бита заполнения в строке. Входной вектор определяет адрес строки в таблице, заполнение данной строки является выходным вектором. Затем 4-разрядные выходные векторы последовательно объединяются в 32-разрядный вектор.

1.3. При сложении и циклическом сдвиге двоичных векторов старшими разрядами считаются разряды накопителей с большими номерами.

1.4. При записи ключа (И", W 2 ..., W q e{0,1), д= N256, в

КЗУ значение W\ вводится в i-й разряд накопителя Xq, значение W 2 вводится во 2-й разряд накопителя Л#, ... , значение W^ 2 вводится в 32-й разряд накопителя Xq; значение W33 вводится в 1-й разряд накопителя Х\ у значение вводится во 2-й разряд накопителя Х\ у... , значение W M вводится в 32-й разряд накопителя Х\\ значение W 6 5 вводится в 1-й разряд накопителя Х 2 и т.д., значение 1У 2 5Ь вводится в 32-й разряд накопителя Ху.

1.5. При перезаписи информации содержимое р-го разряда одного накопителя (сумматора) переписывается в р-й разряд другого накопителя (сумматора).

1.6. Значения постоянных заполнений Cj, С 2 (констант) накопителей /V 6 , /V5 приведены в приложении 2.

1.7. Ключи, определяющие заполнения КЗУ и таблиц блока подстановки К, являются секретными элементами и поставляются в установленном порядке.

Заполнение таблиц блока подстановки К является долговременным ключевым элементом, общим для сети ЭВМ.

Организация различных видов связи достигается построением соответствующей ключевой системы. При этом может быть использована возможность выработки ключей (заполнений КЗУ) в режиме простой замены и зашифрования их в режиме простой замены с обеспечением имитозащиты для передачи по каналам связи или хранения в памяти ЭВМ.

1.8. В криптосхеме предусмотрены четыре вида работы: зашифрование (расшифрование) данных в режиме простой замены; зашифрование (расшифрование) данных в режиме гаммирования;

зашифрование (расшифрование) данных в режиме гаммирования с обратной связью;

режим выработки имитовставки.

Схемы программной реализации алгоритма криптографического преобразования приведены в приложении 3.

2. РЕЖИМ ПРОСТОЙ ЗАМЕНЫ

2.1. Зашифрование открытых данных в режиме простой замены

2.1.1. Криптосхема» реализующая алгоритм зашифрования в режиме простой замены, должна иметь вид, указанный на черт.2.

Открытые данные, подлежащие зашифрованию, разбивают на блоки по 64 бита в каждом. Ввод любого блока Т {) = (Д|(0), ^(О), ..., д 3 1(0), я 32 (0), £|(0), Ь 2 (0) у... , Z> 32 (0)) двоичной информации в накопители N\ и N 2 производится так, что значение Д|(0) вводится в 1-й разряд N|, значение а 2 (0) вводится во 2-й разряд /Vj и т.д, значение я 32 (0) вводится в 32-й разряд iVj; значение />|(0) вводится в

1- й разряд Л/ 2 , значение Ь 2 (0) вводится во 2-й разряд N 2 и т.д., значение /> 32 (0) вводится в 32-й разряд N 2 . В результате получают состояние (я 32 (0), я 3 |(0), ... , а 2 (0) у <7|(0)) накопителя yVj и состояние (/> 32 (0), Ь 2 1(0), ... , />|(0)) накопителя N 2 .

2.1.2. В КЗУ вводятся 256 бит ключа. Содержимое восьми 32-раз-рядных накопителей Aq, X\ t ... , Xj имеет вид:

^0 = (^32^3.....

*1 =(^64^63, . ^34^33)

*7 = (^56> ^255. ... , И/ 226 , ^ 225)

2.1.3. Алгоритм зашифрования 64-разрядного блока открытых данных в режиме простой замены состоит из 32 циклов.

В первом цикле начальное заполнение накопителя суммируется по модулю 2 32 в сумматоре СМ\ с заполнением накопителя Xq при этом заполнение накопителя Nj сохраняется.

Результат суммирования преобразуется в блоке подстановки К и полученный вектор поступает на вход регистра /?, где циклически сдвигается на одиннадцать шагов в сторону старших разрядов. Результат сдвига суммируется поразрядно по модулю 2 в сумматоре СМ 2 с 32-разрядным заполнением накопителя yV 2 . Полученный в СМ 2 результат записывается в N\ % при этом старое заполнение N| переписывается в N 2 . Первый цикл заканчивается.

Последующие циклы осуществляются аналогично, при этом во

2- м цикле из КЗУ считывается заполнение Х\, в 3-м цикле из КЗУ

считывается заполнение Х 2 и т.д., в 8-м цикле из КЗУ считывается заполнение Xj. В циклах с 9-го по 16-й, а также в циклах с 17-го по 24-й заполнения из КЗУ считываются в том же порядке:

В последних восьми циклах с 25-го по 32-й порядок считывания заполнений КЗУ обратный:

ад,ад,ад,ад.

Таким образом, при зашифровании в 32 циклах осуществляется следующий порядок выбора заполнений накопителей:

ад, ^2,^},^4>^5,^6»^7, ад, ^2,^3»^4,^5,-^6,^7, ад, ад,ад,ад, ад,ад,ад,ад.

В 32 цикле результат из сумматора СЛ/ 2 вводится в накопитель УУ 2 , а в накопителе N\ сохраняется старое заполнение.

Полученные после 32-го никла зашифрования заполнения накопителей N| и N2 являются блоком зашифрованных данных, соответствующим блоку открытых данных.

2.1 4 Уравнения зашифрования в режиме простой замены имеют вид:

J*Cr> »(

I Ь(/) = а(/~ I)

при у = I -24;

Г«

\bO) - а О - О при / 8* 25 -г 31; а(32) = а (31)

А (32) = (д (31) ffl X 0)KRG> Ь (31)

где д(0) = (а 32 (0), «з|(0), ... , Д|(0)) - начальное заполнение N\ перед первым циклом зашифрования;

6(0) = (632(0), 63j(0), ... , 6j(0)) - начальное заполнение /У 2 перед первым циклом зашифрования;

a(j) = (032(7), 0з|(/) э... , 0|(/)) - заполнение УУ, после у-го цикла зашифрования;

b(j) = (6з 2 (/), 63j(/"), ... , 6|(/)) - заполнение /V 2 после у-го цикла зашифрования, у = 032.

Знак ф означает поразрядное суммирование 32-разрядных векторов по модулю 2.

Знак Ш означает суммирование 32-разрядных векторов по модулю 2 32 . Правила суммирования по модулю 2 32 приведены в приложении 4;

/?- операция циклического сдвига на одиннадцать шагов в сторону старших разрядов, т.е.

^(г 32»О|> г 30> г 29> г 28> г 27> г 26» г 25> г 24> г 23’ Г 22» Г 2Ь Г 20> » г 2* г |)~

= (г 21» г 20> - » г 2* г 1 * Г 32>Г31 *ГзО» г 29* г 28* , 27э"26э/"25> , 24>Г23» , 22)*

2.1.5. 64-разрядный блок зашифрованных данных Т ш выводится из накопителей Л^, УУ 2 в следующем порядке: из 1-го, 2-го, ... , 32-го разрядов накопителя Л7|, затем из 1-го, 2-го, ... , 32-го разрядов накопителя W 2 , т.е.

т ш - (а,<32),0 2 (32),0 32 (32), 6,(32), 6 2 <32),6 32 <32».

Остальные блоки открытых данных в режиме простой замены зашифровываются аналогично.

2.2. Расшифрование зашифрованных данных в режиме простой замены

2.2.1. Криптосхема, реализующая алгоритм расшифрования в режиме простой замены, имеет тот же вид (см.чсрт.2), что и при зашифровании. В КЗУ вводятся 256 бит того же ключа, на котором осуществлялось зашифрование. Зашифрованные данные, подлежащие расшифрованию, разбиты на блоки по 64 бита в каждом Ввод любого блока

Т ш - (0,(32),о 2 (32), ..., 0 32 (32), 6,(32), 6 2 (32), ..., 6 32 (32))

в накопители Л’, и N 2 производятся так, что значение дj(32) вводится в 1-й разряд /V, значение о 2 (32) вводится во 2-й разряд /V, и т.д., значение a 32 (32) вводится в 32-й разряд /V,; значение 6,(32) вводится в 1-й разряд N 2 и т.д., значение 6 32 (32) вводится в 32-й разряд N 2 .

2.2.2. Расшифрование осуществляется по тому же алгоритму, что и зашифрование открытых данных, с тем изменением, что заполнения накопителей Xq, Х\ у... , Xj считываются из КЗУ в циклах расшифрования в следующем порядке:

ад, ад 3 ,ад,ад, ад,ад,ад,ад 0 ,

ад 6 ,ад 4 ,ад 2 ,ад, ад,ад,ад 2 ,ад.

2.2.3. Уравнения расшифрования имеют вид:

Г д (32 -/) = (д (32 - / + 1) ШЛГ,.,) *ЛФ6(32-/ + 1) b (32 - /) = д (32 - / + 1) при,/=1+8;

I о(32- /) = (а(32-/М)ШДГ (32 _ /)(тод8))КЛФЬ(32./М) |6(32-/) = д (32 - / + 1)

при /= 9 + 31;

Ь(0) = (а (1) ШДГо) ОФй(1)

2.2.4. Полученные после 32 циклов работы заполнения накопителей W, и N 2 составляют блок открытых данных.

То = (fli(O), а 2 (0), ... , Аз 2 (0)» 6,(0), 6 2 (0), ... , 6 32 (0)), соответствующий блоку зашифрованных данных, при этом значение о,(0) блока 7о соответствует содержимому 1-го разряда yV, значение 02(0) соот-

С. 8 ГОСТ 28147-89

ветствует содержимому 2-го разряда N\ и т.д., значение Дз2(0) соответствует содержимому 32-го разряда N\; значение 6j(0) соответствует содержимому 1-го разряда значение ^(0) соответствует содержимому 2-го разряда N2 и т.д., значение £зг(0) соответствует содержимому 32-го разряда N2-

Аналогично расшифровываются остальные блоки зашифрованных данных.

2.3. Алгоритм зашифрования в режиме простой замены 64-битового блока Г 0 обозначается через А у т.е.

А (Т 0) = А (а (0), Ь (0)) = (а (32), Ь (32)) = Т ш.

2.4. Режим простой замены допускается использовать для зашифрования (расшифрования) данных только в случаях, приведенных в п.1.7.

3. РЕЖИМ ГАММИРОВАНИЯ

3.1. Зашифрование открытых данных в режиме гаммирования

3.1.1. Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования, имеет вид, указанный на черт.З.

Открытые данные, разбитые на 64-раэрядиые блоки Т\}\ 7}, 2) ..., 7}) м “ , 1 7[) М) , зашифровываются в режиме гаммирования путем поразрядного суммирования по модулю 2 в сумматоре СЛ/5 с гаммой шифра Г ш, которая вырабатывается блоками по 64 бита, т е.

Г _/Л1) Я2) Лм-1) ЛМ)\

"ill V 1 ш э * ш * » " Ш » " * * * " 111 /»

где М - определяется объемом шифруемых данных.

Tjj) - У-й 64-разрядный блок, /« число двоичных разрядов в блоке 7J) M) может быть меньше 64, при этом неиспользованная для зашифрования часть гаммы шифра из блока Г\^ ] отбрасывастся.

3.1.2. В КЗУ вводятся 256 бит ключа. В накопители iVj, N 2 вводится 64-разрядная двоичная последовательность (синхропосылка) S = (5*1, S 2 , ... , 5^4), являющаяся исходным заполнением этих накопителей для последующей выработки Мблоков гаммы шифра. Синхропосылка вводится в jV| и Л^так, что значение 5[ вводится в 1-й разряд УУ}, значение S 2 вводится во 2-й разряд N\ и т.д., значение ^вводится в 32-й разряд 7V|; значение S33 вводится в 1-й разряд N 2 , значение 4S34 вводится во 2-й разряд N 2 и т.д., значение вводится в 32-й разряд N 2 .

3.1.3. Исходное заполнение накопителей /Vj и N 2 (синхропосылка.5) зашифровывается в режиме простой замены в соответствии с

В предыдущей статье данного цикла, посвященной механизму 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 для разработчиков, мы рассмотрим ряд изменений на уровне ядра операционной системы, которые могут представлять интерес для разработчиков приложений.

Служба WER (Windows Error Reporting ) служит для сбора и отправки отладочной информации о падении системных и сторонних приложений в Windows на сервера Microsoft. По задумке Microsoft, эта информация должна анализироваться и при наличии решения, вариант исправления проблемы должен отправляется пользователю через Windows Error Reporting Response. Но по факту мало кто пользуется этим функционалом, хотя Microsoft настойчиво оставляет службу сбора ошибок WER включенной по умолчанию во всех последних версиях Windows. В большинстве случае о службе WER вспоминают, когда каталог начинает занимать на системном диске довольно много места (вплоть до нескольких десятков Гб), даже не смотря на то что на этом каталоге по умолчанию включена .

Служба Windows Error Reporting

Служба Windows Error Reporting представляет собой отдельный сервис Windows, который можно легко отключить командой:

Внутри каталога WER\ReportQueue\ содержится множество каталогов, с именами в формате:

  • Critical_6.3.9600.18384_{ID}_00000000_cab_3222bf78
  • Critical_powershell.exe_{ID}_cab_271e13c0
  • Critical_sqlservr.exe__{ID}_cab_b3a19651
  • NonCritical_7.9.9600.18235__{ID}_0bfcb07a
  • AppCrash_cmd.exe_{ID}_bda769bf_37d3b403

Как вы видите, имя каталога содержит степень критичности события и имя конкретного exe файла, который завершился аварийно. Во всех каталогах обязательно имеется файл Report.wer , который содержит описание ошибок и несколько файлов с дополнительной информацией.

Очистка папки WER\ReportQueue в Windows

Как правило, размер каждой папки незначителен, но в некоторых случаях для проблемного процесса генерируется дамп памяти, который занимает довольно много места. На скриншоте ниже видно, что размер файла дампа memory.hdmp составляет около 610 Мб. Парочка таким дампов – и на диске исчезло несколько свободных гигибайт.

Чтобы очистить все эти ошибки и журналы штатными средствами, откройте панель управления и перейдите в раздел ControlPanel -> System and Security -> Action Center -> Maintenance -> View reliability history -> View all problem reports и нажмите на кнопку Clear all problem reports .

Для быстрого освобождения места на диске от файлов отладки, сгенерированных службой WER, содержимое следующих каталогов можно безболезненно удалить и руками.

  • C:\ProgramData\Microsoft\Windows\WER\ReportArchive\

Отключение Window Error Reporting в Windows Server 2012 R2 / 2008 R2

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


Отключение функции сбора и отправки отчетов в Windows 10

В Windows 10 возможность отключить Error Reporting через GUI отсутствует. Проверить статус компонента можно в панели управления Система и безопасность ->Центр безопасности и обслуживания -> секция Обслуживание . Как вы видите, по умолчанию параметр включен (Control Panel -> System and Security -> Security and Maintenance -> Maintenance -> Check for solutions to problem reports).

Отключить Windows Error Reporting в Windows 10 можно через реестр. Для этого в ветке нужно создать новый параметр типа DWORD (32 бита) с именем Disabled и значением 1 .

Теперь еще раз проверим статус параметра Поиск решения для указанных в отчетах проблем в панели управления. Его статус должен изменится на Отключено.

Отключение Windows Error Reporting через групповые политики

Ведение журналов службой Windows Error Reporting можно отключить и через групповую политику. Она находится в разделе Computer Configuration/Administrative Templates/Windows Components/Windows Error Reporting (Компоненты Windows -> Отчеты об ошибках Windows). Для отключения сбора и отправки данных включите политику Disable Windows Error Reporting (Отключить отчеты об ошибках Windows).

В результате сообщения об ошибках приложений в Windows перестанут формироваться и автоматически отправляться в Microsoft.

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

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

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

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