Изменение обработки всплывающих окон с жесткой ошибкой в Windows
В автоматической среде может потребоваться автоматически отправлять всплывающие окна с жесткими ошибками, требующие вмешательства пользователя. В этой статье приведен код, необходимый для изменения режима всплывающего окна с жесткой ошибкой.
Исходная версия продукта: Windows
Исходный номер базы знаний: 128642
Сводка
Windows позволяет пользователю изменять обработку всплывающих окон с жесткими ошибками, которые возникают в результате ошибок приложения и системы. К таким ошибкам относятся отсутствие диска на диске и сбои общей защиты (GP).
Эти события приводят к отображению всплывающего окна с жесткой ошибкой, что требует вмешательства пользователя для отправки. Это поведение можно изменить, чтобы такие ошибки регистрировались в журнале событий Windows. Когда ошибка регистрируется в журнале событий, вмешательство пользователя не требуется, и система предоставляет обработчик по умолчанию для жесткой ошибки. Пользователь может просмотреть журнал событий, чтобы определить причину жесткой ошибки.
Запись реестра
Следующая запись реестра управляет обработкой всплывающих окон с жесткой ошибкой в Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\ErrorMode
Допустимые режимы
Ниже приведены допустимые значения для ErrorMode
:
Режим 0
Это режим работы по умолчанию, который сериализует ошибки и ожидает ответа.
Режим 1
Если ошибка не исходит от системы, это обычный режим работы. Если ошибка поступает из системы, она регистрирует ошибку в журнале событий и возвращает ОК к жесткой ошибке. Вмешательство не требуется, и всплывающее окно не отображается.
Режим 2
Это всегда записывает ошибку в журнал событий и возвращает ОК к жесткой ошибке. Всплывающие окна не видны.
Во всех режимах ошибки, возникшие системой, регистрируются в системном журнале. Чтобы запустить автоматический сервер, используйте режим 2.
Пример кода для изменения режима всплывающего окна с жесткой ошибкой
Следующая функция изменяет режим всплывающего окна с жесткой ошибкой. Если функция выполнена успешно, возвращаемое значение равно TRUE. Если функция завершается сбоем, возвращаемое значение равно FALSE.
BOOL SetGlobalErrorMode(
DWORD dwErrorMode // specifies new ErrorMode value
)
{
HKEY hKey;
LONG lRetCode;
// make sure the value passed isn't out-of-bounds
if (dwErrorMode > 2)
return FALSE;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Control\\Windows",
0,
KEY_SET_VALUE,
&hKey) != ERROR_SUCCESS)
return FALSE;
lRetCode=RegSetValueEx(hKey,
"ErrorMode",
0,
REG_DWORD,
(CONST BYTE *) &dwErrorMode,
sizeof(DWORD));
RegCloseKey(hKey);
if (lRetCode != ERROR_SUCCESS)
return FALSE;
return TRUE;
}
Пример кода для получения режима всплывающего окна с жесткой ошибкой
Следующая функция получает режим всплывающего окна с жесткой ошибкой. Если функция выполнена успешно, возвращаемое значение равно TRUE. Если функция завершается сбоем, возвращаемое значение равно FALSE. Если функция выполнена успешно, dwErrorMode
содержит режим всплывающего окна ошибки. dwErrorMode
В противном случае значение не определено.
BOOL GetGlobalErrorMode(
LPDWORD dwErrorMode // Pointer to a DWORD to place popup mode
)
{
HKEY hKey;
LONG lRetCode;
DWORD cbData=sizeof(DWORD);
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Control\\Windows",
0,
KEY_QUERY_VALUE,
&hKey) != ERROR_SUCCESS)
return FALSE;
lRetCode=RegQueryValueEx(hKey,
"ErrorMode",
0,
NULL,
(LPBYTE) dwErrorMode,
&cbData);
RegCloseKey(hKey);
if (lRetCode != ERROR_SUCCESS)
return FALSE;
return TRUE;
}