summaryrefslogtreecommitdiffstats
path: root/private/sdktools/instaler/error.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/sdktools/instaler/error.c')
-rw-r--r--private/sdktools/instaler/error.c202
1 files changed, 202 insertions, 0 deletions
diff --git a/private/sdktools/instaler/error.c b/private/sdktools/instaler/error.c
new file mode 100644
index 000000000..2241d8642
--- /dev/null
+++ b/private/sdktools/instaler/error.c
@@ -0,0 +1,202 @@
+/*++
+
+Copyright (c) 1992 Microsoft Corporation
+
+Module Name:
+
+ error.c
+
+Abstract:
+
+ Error handle module for the INSTALER program
+
+Author:
+
+ Steve Wood (stevewo) 09-Aug-1994
+
+Revision History:
+
+--*/
+
+#include "instaler.h"
+
+VOID
+TraceDisplay(
+ const char *FormatString,
+ ...
+ )
+{
+ va_list arglist;
+
+ va_start( arglist, FormatString );
+ vprintf( FormatString, arglist );
+ if (InstalerLogFile) {
+ vfprintf( InstalerLogFile, FormatString, arglist );
+ }
+ va_end( arglist );
+ fflush( stdout );
+ return;
+}
+
+VOID
+CDECL
+DeclareError(
+ UINT ErrorCode,
+ UINT SupplementalErrorCode,
+ ...
+ )
+{
+ va_list arglist;
+ HMODULE ModuleHandle;
+ DWORD Flags, Size;
+ WCHAR MessageBuffer[ 512 ];
+
+ va_start( arglist, SupplementalErrorCode );
+
+ if ((ErrorCode & 0x0FFF0000) >> 16 == FACILITY_APPLICATION) {
+ ModuleHandle = InstalerModuleHandle;
+ Flags = FORMAT_MESSAGE_FROM_HMODULE;
+ }
+ else
+ if ((ErrorCode & 0x0FFF0000) == FACILITY_NT) {
+ ErrorCode ^= FACILITY_NT;
+ ModuleHandle = ModuleInfo[ NTDLL_MODULE_INDEX ].ModuleHandle;
+ Flags = FORMAT_MESSAGE_FROM_HMODULE;
+ }
+ else {
+ ModuleHandle = NULL;
+ Flags = FORMAT_MESSAGE_FROM_SYSTEM;
+ }
+
+ Size = FormatMessage( Flags,
+ (LPCVOID)ModuleHandle,
+ ErrorCode,
+ 0,
+ MessageBuffer,
+ sizeof( MessageBuffer ) / sizeof( WCHAR ),
+ &arglist
+ );
+ va_end( arglist );
+
+ if (Size != 0) {
+ printf( "INSTALER: %ws", MessageBuffer );
+ }
+ else {
+ printf( "INSTALER: Unable to get message text for %08x\n", ErrorCode );
+ }
+
+ if (ModuleHandle == InstalerModuleHandle &&
+ SupplementalErrorCode != 0 &&
+ SupplementalErrorCode != ERROR_GEN_FAILURE &&
+ SupplementalErrorCode != STATUS_UNSUCCESSFUL
+ ) {
+ if ((SupplementalErrorCode & 0x0FFF0000) == FACILITY_NT) {
+ SupplementalErrorCode ^= FACILITY_NT;
+ ModuleHandle = ModuleInfo[ NTDLL_MODULE_INDEX ].ModuleHandle;
+ Flags = FORMAT_MESSAGE_FROM_HMODULE;
+ }
+ else {
+ ModuleHandle = NULL;
+ Flags = FORMAT_MESSAGE_FROM_SYSTEM;
+ }
+ Size = FormatMessage( Flags,
+ (LPCVOID)ModuleHandle,
+ SupplementalErrorCode,
+ 0,
+ MessageBuffer,
+ sizeof( MessageBuffer ) / sizeof( WCHAR ),
+ NULL
+ );
+ if (Size != 0) {
+ while (Size != 0 && MessageBuffer[ Size ] <= L' ') {
+ MessageBuffer[ Size ] = UNICODE_NULL;
+ Size -= 1;
+ }
+
+ printf( " '%ws'\n", MessageBuffer );
+ }
+ else {
+ printf( "INSTALER: Unable to get message text for %08x\n", SupplementalErrorCode );
+ }
+ }
+
+
+
+ return;
+}
+
+WCHAR MessageBoxTitle[ MAX_PATH ];
+
+
+UINT
+CDECL
+AskUser(
+ UINT MessageBoxFlags,
+ UINT MessageId,
+ UINT NumberOfArguments,
+ ...
+ )
+{
+ va_list arglist;
+ HMODULE ModuleHandle;
+ DWORD Flags, Size;
+ WCHAR MessageBuffer[ 512 ];
+ PWSTR s;
+ ULONG Args[ 24 ];
+ PULONG p;
+
+ if (MessageBoxTitle[ 0 ] == UNICODE_NULL) {
+ Args[ 0 ] = (ULONG)InstallationName;
+ Args[ 1 ] = 0;
+ Size = FormatMessageW( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ (LPCVOID)InstalerModuleHandle,
+ INSTALER_ASKUSER_TITLE,
+ 0,
+ MessageBoxTitle,
+ sizeof( MessageBoxTitle ) / sizeof( WCHAR ),
+ (va_list *)Args
+ );
+ if (Size == 0) {
+ _snwprintf( MessageBoxTitle,
+ sizeof( MessageBoxTitle ) / sizeof( WCHAR ),
+ L"Application Installation Monitor Program - %ws",
+ InstallationName
+ );
+ }
+ else {
+ if ((s = wcschr( MessageBoxTitle, L'\r' )) ||
+ (s = wcschr( MessageBoxTitle, L'\n' ))
+ ) {
+ *s = UNICODE_NULL;
+ }
+ }
+ }
+
+ va_start( arglist, NumberOfArguments );
+ p = Args;
+ while (NumberOfArguments--) {
+ *p++ = va_arg( arglist, ULONG );
+ }
+ *p++ = 0;
+ va_end( arglist );
+
+ Size = FormatMessageW( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ (LPCVOID)InstalerModuleHandle,
+ MessageId,
+ 0,
+ MessageBuffer,
+ sizeof( MessageBuffer ) / sizeof( WCHAR ),
+ (va_list *)Args
+ );
+
+ if (Size != 0) {
+ return MessageBox( NULL,
+ MessageBuffer,
+ MessageBoxTitle,
+ MB_SETFOREGROUND | MessageBoxFlags
+ );
+ }
+ else {
+ return IDOK;
+ }
+}