2025-04-27 07:49:33 -04:00

112 lines
3.2 KiB
C++

#include <windows.h>
#include <stdio.h>
#include <stdarg.h>
#include <objbase.h>
#include <wbemcli.h>
#include "resource.h"
#include "errors.h"
// Command-line Error Messages
LPCWSTR s_pszErrors[] =
{
// 0-4
L"Error on command-line at position %d - Invalid character",
L"Missing value for switch at position %d",
L"Unrecognized switch %s found at position %d",
L"Unrecognized Authentication Level %s at position %d",
L"Unrecognized Impersonation Level %s at position %d",
// 5-9
L"Unrecognized Operation %s at position %d",
L"Unrecognized Class Flag %s at position %d",
L"Unrecognized Instance Flag %s at position %d",
L"Unrecognized DeclGroup type %s at position %d",
L"No Operation specified on the command-line. Use the /op switch",
//10-14
L"Invalid switch(es) for the operation specified",
L"No Input File/URL Specified. Use the /i switch",
L"Only one operation at a time, please",
L"No Object specified for the operation. Use the /obj switch",
L"Invalid switch (/deep or /query or /names) for /op=get",
//15-19
L"No Query specified for /op=query. Use the /query switch",
L"Invalid switch (/deep or /obj or /names) for /op=query",
L"Invalid switch (/query) for the enumeration operation",
L"Unrecognized Encoding %s at %d",
L"Input File %s cannot be found, or unreadable",
// 20-24
L"Syntax errors in input file %s",
L"Compilation errors in input file %s",
L"Syntax check passed successfully on input file %s",
L"Compilation successfully done on input file %s"
};
// Syntax Errors
LPCWSTR s_pszSyntaxErrors[] =
{
// 0-4
L"Error in Server XML response at line# %d and position %d.\n"\
L"\tThe source text is \"%s\", and the reason is \"%s\""
};
// Information Messages
LPCWSTR s_pszInformation [] =
{
//0-4
L"WMI XML Tranformer\n"\
L"===================\n",
L"The file %s was successfully compiled\n",
L"The Operation was successful\n"
};
void CreateMessage(UINT iStringTableID, ...)
{
// Get the error string template from the string table
WCHAR pszErr[256];
int length = 0;
if(length = LoadString(NULL, iStringTableID, pszErr, 256))
{
pszErr[length] = NULL;
// Initialize the var args variables
va_list marker;
va_start( marker, iStringTableID);
vfwprintf(stderr, pszErr, marker );
}
else
fwprintf(stderr, L"Catastrophic error - could not get the string table of error messages");
}
void CreateWMIMessage(HRESULT hr)
{
BSTR bsMessageText = NULL;
// Used as our error code translator
IWbemStatusCodeText *pErrorCodeTransformer = NULL;
HRESULT result = CoCreateInstance (CLSID_WbemStatusCodeText, 0, CLSCTX_INPROC_SERVER,
IID_IWbemStatusCodeText, (LPVOID *) &pErrorCodeTransformer);
if (SUCCEEDED (result))
{
if(SUCCEEDED(pErrorCodeTransformer->GetErrorCodeText(hr, (LCID) 0, 0, &bsMessageText)) && bsMessageText)
{
// Create a message with the WMI message embedded in it
CreateMessage(XML_COMP_WMI_ERROR, bsMessageText);
SysFreeString(bsMessageText);
}
else
{
// Create a messge with the hex value of the COM HRESULT in it
CreateMessage(XML_COMP_UNKNOWN_ERROR, hr);
}
pErrorCodeTransformer->Release ();
}
}