windows-nt/Source/XPSP1/NT/sdktools/pfmon/error.c
2020-09-26 16:20:57 +08:00

96 lines
2.2 KiB
C

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
error.c
Abstract:
Error handle module for the pfmon program
Author:
Mark Lucovsky (markl) 26-Jan-1995
Revision History:
--*/
#include "pfmonp.h"
VOID
__cdecl
DeclareError(
UINT ErrorCode,
UINT SupplementalErrorCode,
...
)
{
va_list arglist;
HMODULE ModuleHandle;
DWORD Flags, Size;
UCHAR MessageBuffer[ 512 ];
va_start( arglist, SupplementalErrorCode );
if ((ErrorCode & 0x0FFF0000) >> 16 == FACILITY_APPLICATION) {
ModuleHandle = PfmonModuleHandle;
Flags = FORMAT_MESSAGE_FROM_HMODULE;
}
else {
ModuleHandle = NULL;
Flags = FORMAT_MESSAGE_FROM_SYSTEM;
}
Size = FormatMessage( Flags,
(LPCVOID)ModuleHandle,
ErrorCode,
0,
MessageBuffer,
sizeof( MessageBuffer ),
&arglist
);
va_end( arglist );
if (Size != 0) {
fprintf( stderr, "PFMON: %s", MessageBuffer );
}
else {
fprintf( stderr, "PFMON: Unable to get message text for %08x\n", ErrorCode );
}
if (ModuleHandle == PfmonModuleHandle &&
SupplementalErrorCode != 0 &&
SupplementalErrorCode != ERROR_GEN_FAILURE
) {
ModuleHandle = NULL;
Flags = FORMAT_MESSAGE_FROM_SYSTEM;
Size = FormatMessage( Flags,
(LPCVOID)ModuleHandle,
SupplementalErrorCode,
0,
MessageBuffer,
sizeof( MessageBuffer ),
NULL
);
if (Size != 0) {
while (Size != 0 && MessageBuffer[ Size ] <= ' ') {
MessageBuffer[ Size ] = '\0';
Size -= 1;
}
printf( " '%s'\n", MessageBuffer );
}
else {
printf( "PFMON: Unable to get message text for %08x\n", SupplementalErrorCode );
}
}
return;
}