Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

275 lines
7.8 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
mofgen.h
Abstract:
This include file contains the definition for the CMofGen class
Author:
Mohit Srivastava 28-Nov-00
Revision History:
--*/
#ifndef _mofgen_h_
#define _mofgen_h_
extern LPCWSTR g_wszIIsProvider; // defined in iisprov.h
#include <wbemcli.h>
struct CimTypeStringMapping
{
CIMTYPE cimtype;
LPCWSTR wszString;
LPCWSTR wszFormatString;
};
static CimTypeStringMapping CimTypeStringMappingData[] =
{
{ CIM_SINT8, L"sint8" , L"%d" },
{ CIM_UINT8, L"uint8" , L"%d" },
{ CIM_SINT16, L"sint16" , L"%hd" },
{ CIM_UINT16, L"uint16" , L"%hu" },
{ CIM_SINT32, L"sint32" , L"%d" },
{ CIM_UINT32, L"uint32" , L"%u" },
{ CIM_SINT64, L"sint64" , L"%I64d" },
{ CIM_UINT64, L"uint64" , L"%I64u" },
{ CIM_REAL32, L"real32" , L"%f" },
{ CIM_REAL64, L"real64" , L"%f" },
{ CIM_BOOLEAN, L"boolean" , NULL },
{ CIM_STRING, L"string" , L"\"%s\"" },
{ CIM_DATETIME, L"datetime" , NULL },
{ CIM_REFERENCE, L"reference", NULL },
{ CIM_CHAR16, L"char16" , NULL },
{ CIM_OBJECT, L"object" , NULL },
{ 0, NULL , NULL }
};
class CMofGenUtils
{
public:
static CimTypeStringMapping* LookupCimType(
CIMTYPE cimtype)
{
for(ULONG i = 0; CimTypeStringMappingData[i].wszString != NULL; i++)
{
if(cimtype == CimTypeStringMappingData[i].cimtype)
{
return &CimTypeStringMappingData[i];
}
}
return NULL;
}
};
class CMofGen
{
public:
CMofGen() : m_pFile(NULL),
m_wszHeaderFileName(NULL),
m_wszFooterFileName(NULL),
m_wszOutFileName(NULL),
m_wszTemp(NULL),
m_cchTemp(0)
{
}
virtual ~CMofGen()
{
if(m_pFile != NULL)
{
fclose(m_pFile);
}
delete [] m_wszTemp;
}
bool ParseCmdLine (int argc, wchar_t **argv);
void PrintUsage (wchar_t **argv);
HRESULT Push();
LPWSTR GetOutFileName()
{
return m_wszOutFileName;
}
private:
//
// File handle to output file
//
FILE* m_pFile;
LPWSTR m_wszHeaderFileName;
LPWSTR m_wszFooterFileName;
LPWSTR m_wszOutFileName;
LPWSTR m_wszTemp;
ULONG m_cchTemp;
HRESULT GenerateEscapedString(LPCWSTR i_wsz);
HRESULT PushProperties(
WMI_CLASS* i_pElement);
HRESULT PushMethods(
WMI_CLASS* i_pElement);
HRESULT PushAssociationComponent(
LPWSTR i_wszComp,
LPWSTR i_wszClass);
HRESULT PushFormattedMultiSz();
HRESULT PushFile(
LPWSTR i_wszFile);
template <class T>
HRESULT PushClasses(CHashTable<T>* i_phashTable,
bool bAssoc)
{
DBG_ASSERT(i_phashTable != NULL);
DBG_ASSERT(m_pFile != NULL);
HRESULT hr = S_OK;
//
// Vars needed for iteration
//
CHashTable<T>::Record* pRec = NULL;
LPWSTR wszParentClass = NULL;
LPWSTR wszDescription = NULL;
int iError = 0;
//
// Walk thru classes
//
ULONG iShipped;
CHashTable<T>::iterator iter;
CHashTable<T>::iterator iterEnd = i_phashTable->end();
for (iter = i_phashTable->begin(); iter != iterEnd; ++iter)
{
pRec = iter.Record();
iShipped = bAssoc ?
((WMI_ASSOCIATION*)(pRec->m_data))->dwExtended :
((WMI_CLASS*)(pRec->m_data))->dwExtended;
if(iShipped == SHIPPED_TO_MOF)
{
if(!bAssoc)
{
wszParentClass = ((WMI_CLASS*)(pRec->m_data))->pszParentClass;
wszDescription = ((WMI_CLASS*)(pRec->m_data))->pszDescription;
}
else
{
wszParentClass = ((WMI_ASSOCIATION*)(pRec->m_data))->pszParentClass;
// wszDescription = ((WMI_ASSOCIATION*)(pRec->m_data))->pszDescription;
}
iError = fwprintf(m_pFile, L"[dynamic : ToInstance,provider(\"%s\"),Locale(1033)", g_wszIIsProvider);
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
if(wszDescription != NULL)
{
iError = fwprintf(m_pFile, L",Description(\"%s\")", wszDescription);
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
}
iError = fwprintf(m_pFile, L"]\n");
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
iError = fwprintf(m_pFile, L"class %s : %s\n", pRec->m_wszKey, wszParentClass);
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
iError = fwprintf(m_pFile, L"{\n");
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
if(!bAssoc)
{
bool bPutNameProperty = true;
for(ULONG j = 0; g_awszParentClassWithNamePK[j] != NULL; j++)
{
//
// Deliberate ==
//
if(g_awszParentClassWithNamePK[j] == ((WMI_CLASS *)(pRec->m_data))->pszParentClass)
{
bPutNameProperty = false;
}
}
if( bPutNameProperty )
{
iError = fwprintf(m_pFile, L"\t[Key] string Name;\n");
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
}
hr = PushProperties((WMI_CLASS *)(pRec->m_data));
if(FAILED(hr))
{
goto exit;
}
hr = PushMethods((WMI_CLASS *)(pRec->m_data));
if(FAILED(hr))
{
goto exit;
}
}
else
{
hr = PushAssociationComponent(
((WMI_ASSOCIATION *)(pRec->m_data))->pType->pszLeft,
((WMI_ASSOCIATION *)(pRec->m_data))->pcLeft->pszClassName);
if(FAILED(hr))
{
goto exit;
}
hr = PushAssociationComponent(
((WMI_ASSOCIATION *)(pRec->m_data))->pType->pszRight,
((WMI_ASSOCIATION *)(pRec->m_data))->pcRight->pszClassName);
if(FAILED(hr))
{
goto exit;
}
}
iError = fwprintf(m_pFile, L"};\n\n");
if(iError < 0)
{
hr = E_FAIL;
goto exit;
}
}
}
exit:
return hr;
}
};
#endif // _mofgen_h_