[SETUPLIB][USETUP] Add support for setup error handling.

This commit is contained in:
Hermès Bélusca-Maïto 2018-10-28 22:51:33 +01:00
parent 64e217e97c
commit f894631472
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
3 changed files with 35 additions and 0 deletions

View file

@ -675,6 +675,10 @@ InitializeSetup(
// pSetupData->LayoutList = NULL;
// pSetupData->LanguageList = NULL;
/* Initialize error handling */
pSetupData->LastErrorNumber = ERROR_SUCCESS;
pSetupData->ErrorRoutine = NULL;
/* Initialize global unicode strings */
RtlInitUnicodeString(&pSetupData->SourcePath, NULL);
RtlInitUnicodeString(&pSetupData->SourceRootPath, NULL);

View file

@ -58,8 +58,15 @@ extern HANDLE ProcessHeap;
struct _USETUP_DATA;
typedef VOID
(__cdecl *PSETUP_ERROR_ROUTINE)(IN struct _USETUP_DATA*, ...);
typedef struct _USETUP_DATA
{
/* Error handling *****/
ERROR_NUMBER LastErrorNumber;
PSETUP_ERROR_ROUTINE ErrorRoutine;
/* Setup INFs *****/
HINF SetupInf;

View file

@ -3481,6 +3481,29 @@ InstallDirectoryPage(PINPUT_RECORD Ir)
}
// PSETUP_ERROR_ROUTINE
static VOID
__cdecl
USetupErrorRoutine(
IN PUSETUP_DATA pSetupData,
...)
{
INPUT_RECORD Ir;
va_list arg_ptr;
va_start(arg_ptr, pSetupData);
if (pSetupData->LastErrorNumber >= ERROR_SUCCESS &&
pSetupData->LastErrorNumber < ERROR_LAST_ERROR_CODE)
{
// Note: the "POPUP_WAIT_ENTER" actually depends on the LastErrorNumber...
MUIDisplayErrorV(pSetupData->LastErrorNumber, &Ir, POPUP_WAIT_ENTER, arg_ptr);
}
va_end(arg_ptr);
}
static BOOLEAN
AddSectionToCopyQueueCab(HINF InfFile,
PCWSTR SectionName,
@ -5001,6 +5024,7 @@ RunUSetup(VOID)
/* Initialize Setup, phase 0 */
InitializeSetup(&USetupData, 0);
USetupData.ErrorRoutine = USetupErrorRoutine;
/* Hide the cursor */
CONSOLE_SetCursorType(TRUE, FALSE);