// GenericClass.h: interface for the CGenericClass class. // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GENERICCLASS_H__F370C612_D96E_11D1_8B5D_00A0C9954921__INCLUDED_) #define AFX_GENERICCLASS_H__F370C612_D96E_11D1_8B5D_00A0C9954921__INCLUDED_ #include "requestobject.h" #include "MSIDataLock.h" #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CGenericClass { friend BOOL WINAPI DllMain(HINSTANCE, ULONG, LPVOID ); public: CGenericClass(CRequestObject *pObj, IWbemServices *pNamespace, IWbemContext *pCtx = NULL); virtual ~CGenericClass(); //The instance write class which can optionally be implemented virtual HRESULT PutInst ( CRequestObject *pObj, IWbemClassObject *pInst, IWbemObjectSink *pHandler, IWbemContext *pCtx ) = 0; IWbemClassObject *m_pObj; //The instance creation class which must be implemented virtual HRESULT CreateObject ( IWbemObjectSink *pHandler, ACTIONTYPE atAction ) = 0; void CleanUp(); CRequestObject *m_pRequest; protected: // is get buffer neccessary ? HRESULT GetBufferNeccessary ( MSIHANDLE& handle, DWORD dwIndex, DWORD& dwSize, LPWSTR staticBuffer, BOOL bThrow = TRUE ); // get buffer ( caller has to delete ) HRESULT GetBuffer ( MSIHANDLE& handle, DWORD dwIndex, DWORD& dwSize, DWORD& dwdynSize, LPWSTR & dynBuffer, BOOL bThrow = TRUE ); // special get buffer whic hold pointer for buffer to be used HRESULT GetBufferToPut ( MSIHANDLE& handle, DWORD dwIndex, DWORD& dwSize, LPWSTR staticBuffer, DWORD& dwdynSize, LPWSTR& dynBuffer, LPWSTR& Buffer, BOOL bThrow = TRUE ); //Property Methods HRESULT PutProperty(IWbemClassObject *pObj, const char *wcProperty, WCHAR *wcValue); HRESULT PutProperty(IWbemClassObject *pObj, const char *wcProperty, int iValue); HRESULT PutProperty(IWbemClassObject *pObj, const char *wcProperty, float dValue); HRESULT PutProperty(IWbemClassObject *pObj, const char *wcProperty, bool bValue); //Special Property Methods HRESULT PutProperty(IWbemClassObject *pObj, const char *wcProperty, WCHAR *wcValue, DWORD dwCount, ... ); //Key Property Methods HRESULT PutKeyProperty ( IWbemClassObject *pObj, const char *wcProperty, WCHAR *wcValue, bool *bKey, CRequestObject *pRequest ); HRESULT PutKeyProperty ( IWbemClassObject *pObj, const char *wcProperty, int iValue, bool *bKey, CRequestObject *pRequest ); //Special Key Property Methods HRESULT PutKeyProperty ( IWbemClassObject *pObj, const char *wcProperty, WCHAR *wcValue, bool *bKey, CRequestObject *pRequest, DWORD dwCount, ... ); HRESULT PutPropertySpecial ( MSIHANDLE& handle, DWORD dwIndex, DWORD& dwSize, LPWSTR staticBuffer, DWORD& dwdynSize, LPWSTR& dynBuffer, LPCSTR wszPropName, BOOL bThrow = TRUE ); HRESULT PutPropertySpecial ( MSIHANDLE& handle, DWORD dwIndex, DWORD& dwSize, LPWSTR staticBuffer, DWORD& dwdynSize, LPWSTR& dynBuffer, BOOL bThrow, DWORD dwCount, ... ); //This handles initialization of views bool GetView ( MSIHANDLE *phView, WCHAR *wcPackage, WCHAR *wcQuery, WCHAR *wcTable, BOOL bCloseProduct, BOOL bCloseDatabase ); //Utility Methods void CheckMSI(UINT uiStatus); HRESULT CheckOpen(UINT uiStatus); bool FindIn(BSTR bstrProp[], BSTR bstrSearch, int *iPos); HRESULT SetSinglePropertyPath(WCHAR wcProperty[]); HRESULT GetProperty(IWbemClassObject *pObj, const char *cProperty, BSTR *wcValue); HRESULT GetProperty(IWbemClassObject *pObj, const char *cProperty, int *piValue); HRESULT GetProperty(IWbemClassObject *pObj, const char *cProperty, bool *pbValue); WCHAR * GetFirstGUID(WCHAR wcIn[], WCHAR wcOut[]); WCHAR * RemoveFinalGUID(WCHAR wcIn[], WCHAR wcOut[]); HRESULT SpawnAnInstance ( IWbemServices *pNamespace, IWbemContext *pCtx, IWbemClassObject **pObj, BSTR bstrName ); HRESULT SpawnAnInstance ( IWbemClassObject **pObj ); INSTALLUI_HANDLER SetupExternalUI (); //Requires a current CRequestObject void RestoreExternalUI ( INSTALLUI_HANDLER ui ); //Restore UI handle MSIDataLock msidata; IWbemServices *m_pNamespace; IWbemClassObject *m_pClassForSpawning; IWbemContext *m_pCtx; //functions/members for NT4 install fix HRESULT LaunchProcess(WCHAR *wcAction, WCHAR *wcCommandLine, UINT *uiStatus); WCHAR * GetNextVar(WCHAR *pwcStart); long GetVarCount(void * pEnv); static CRITICAL_SECTION m_cs; }; #endif // !defined(AFX_GENERICCLASS_H__F370C612_D96E_11D1_8B5D_00A0C9954921__INCLUDED_)