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

158 lines
4.7 KiB
C++

//***************************************************************************/
//
// Copyright (c) 2000-2001 Microsoft Corporation
//
// utils.h
//
// ramrao Created 13 Nov 2000.
//
// Utility classes/macros and function decralation
//
//***************************************************************************/
#ifndef _WMI2XSD_UTILS_H_
#define _WMI2XSD_UTILS_H_
// Macros used to free/release memory
#define SAFE_DELETE_PTR(pv) \
{ delete pv; \
pv = NULL; }
#define SAFE_RELEASE_PTR(pv) \
{ if(pv){ pv->Release(); } \
pv = NULL; }
#define SAFE_DELETE_ARRAY(pv) \
{ delete []pv; \
pv = NULL; }
#define SAFE_FREE_SYSSTRING(pv) \
{ SysFreeString(pv); \
pv = NULL; }
#define STR_TRUE L"True"
#define STR_FALSE L"False"
#define XSD_BOOL L"xsd:boolean"
#define XSD_STRING L"xsd:string"
#define XSD_I2 L"xsd:short"
#define XSD_UI1 L"xsd:unsignedByte"
#define XSD_I1 L"xsd:byte"
#define XSD_UI2 L"xsd:unsignedShort"
#define XSD_I4 L"xsd:int"
#define XSD_UI4 L"xsd:unsignedInt"
#define XSD_I8 L"xsd:long"
#define XSD_UI8 L"xsd:unsignedLong"
#define XSD_R4 L"xsd:float"
#define XSD_R8 L"xsd:double"
#define MAXOCCURS_FORARRAY L"xsd:unbounded"
#define MINOCCURS L"xsd:unbounded"
#define XSD_ANYTYPE L"xsd:anyType"
#define XSD_SCHEMANAMESPACE L"http://www.w3.org/2000/10/XMLSchema"
#define WMI_DATETIME L"datetime"
#define MAXXSDTYPESIZE 255
#define MAXNUMERICSIZE 50
#define QUALIFIERFLAVORSIZE 50
#define WMI_BOOL L"boolean"
#define WMI_STRING L"string"
#define WMI_I2 L"char16"
#define WMI_UI1 L"uint8"
#define WMI_I1 L"sint8"
#define WMI_UI2 L"uint16"
#define WMI_I4 L"uint32"
#define WMI_UI4 L"sint32"
#define WMI_I8 L"sint64"
#define WMI_UI8 L"sint64"
#define WMI_R4 L"real32"
#define WMI_R8 L"real64"
#define WMI_REF L"ref"
#define WMI_OBJ L"obj"
/// WMIRELATED
#define WMI_EMBEDDEDOBJECT_UNTYPED L"object"
// Some WMI property names
#define CLASSNAMEPROP L"__CLASS"
#define PARENTCLASSPROP L"__SUPERCLASS"
#define GENUSPROP L"__GENUS"
#define SERVER L"__SERVER"
#define NAMESPACE L"__NAMESPACE"
#define CIMTYPEPROP L"CIMTYPE"
#define OBJECT L"object"
void TranslateAndLog( WCHAR * wcsMsg );
//HRESULT ConvertVariantToString(VARIANT varIn,WCHAR *& strout,BSTR szProperty = NULL);
//HRESULT ConvertVariantToString(VARIANT &varIn,BSTR strProperty,IStream *pStream,BOOL bEscape = TRUE);
HRESULT LoadAndAllocateStringW(LONG strID , WCHAR *& pwcsOut);
HRESULT LoadAndAllocateStringA(LONG strID , char *& pszOut);
HRESULT LoadAndAllocateString(LONG strID , TCHAR *& pstrOut);
HRESULT WriteToFile(char * strData ,TCHAR *pFileName = NULL);
HRESULT ConvertVariantArrayToXML(VARIANT varIn,IStream *pStream,BOOL bEscape = FALSE);
HRESULT ConvertToString(void * pData,VARTYPE vt ,IStream *pStream,BOOL bEscape);
//HRESULT GetPropertyWMIType(CIMTYPE cimtype,WCHAR * pType,BOOL &bArray,BOOL bStdWmiImport=FALSE);
//HRESULT GetPropertyXSDType(CIMTYPE cimtype,WCHAR * pType,BOOL &bArray,BOOL bStdWmiImport=FALSE);
//HRESULT GetQualifierWMIType(VARTYPE vType,WCHAR * pType,BOOL & bArray);
//HRESULT GetQualifierXSDType(VARTYPE vType,WCHAR * pType,BOOL & bArray);
BOOL CompareData(VARIANT * pvData1 , VARIANT *pvData2);
BOOL IsEmbededType(LONG cimtype);
BOOL IsPropNull(VARIANT *pVar);
BOOL IsStringType(CIMTYPE cimtype);
ULONG GetLoggingLevel();
//HRESULT AddStringToStream(LONG strID,IStream *pStream);
//HRESULT WriteToStream(IStream *pStream, WCHAR * pBuffer , ULONG *pcbWchar = NULL );
HRESULT CopyStream(IStream *pStreamIn , IStream *pOutStream,BOOL bConvert= TRUE);
HRESULT IsValidName(WCHAR *pstrName);
/*
HRESULT WriteByte (IStream *pStream, unsigned char val);
HRESULT WriteLong (IStream *pStream, long lVal);
HRESULT WriteShort (IStream *pStream, short iVal);
HRESULT WriteDouble (IStream *pStream, double dVal);
HRESULT WriteFloat (IStream *pStream, float fVal);
HRESULT WriteChar(IStream *pStream, char cVal);
HRESULT WriteBool (IStream *pStream, BOOL bVal);
HRESULT WriteString(IStream *pStream, WCHAR * pwcsVal,BOOL bEscape = FALSE);
HRESULT ReplaceXMLSpecialCharsAndWrite(WCHAR *pwcsStr,IStream * pStream);
*/
// Class to Manage string conversions
class CStringConversion
{
public:
CStringConversion() {}
virtual ~CStringConversion() {}
static HRESULT UnicodeToAnsi(WCHAR * pszW, char *& pAnsi);
static HRESULT AllocateAndConvertAnsiToUnicode(char * pstr, WCHAR *& pszW);
static DWORD ConvertLPWSTRToUTF8(LPCWSTR theWcharString,
ULONG lNumberOfWideChars,
LPSTR * lppszRetValue);
};
#endif