// ObjAccess.h #ifndef _OBJACCESS_H #define _OBJACCESS_H #include #include #include "array.h" class CProp { public: CProp() : m_lHandle(0), m_dwSize(0), m_pData(NULL) { } CIMTYPE m_type; long m_lHandle; _bstr_t m_strName; DWORD m_dwSize; LPVOID m_pData; }; typedef CArray CPropArray; class CObjAccess { public: CObjAccess(); CObjAccess(const CObjAccess& other); ~CObjAccess(); const CObjAccess& operator=(const CObjAccess& other); enum INIT_FAILED_PROP_TYPE { // Init returns FALSE if a property isn't found. FAILED_PROP_FAIL, // See if this property is an array. FAILED_PROP_TRY_ARRAY, // If the property isn't found just set the handle to 0 and go on. FAILED_PROP_IGNORE }; BOOL Init( IWbemServices *pSvc, LPCWSTR szClass, LPCWSTR *pszPropNames, DWORD nProps, INIT_FAILED_PROP_TYPE type = FAILED_PROP_FAIL); BOOL WriteArrayData(DWORD dwIndex, LPVOID pData, DWORD dwItemSize); BOOL WriteNonPackedArrayData(DWORD dwIndex, LPVOID pData, DWORD dwItems, DWORD dwTotalSize); BOOL WriteData(DWORD dwIndex, LPVOID pData, DWORD dwSize); BOOL WriteString(DWORD dwIndex, LPCWSTR szValue); BOOL WriteString(DWORD dwIndex, LPCSTR szValue); BOOL WriteDWORD(DWORD dwIndex, DWORD dwValue); BOOL WriteDWORD64(DWORD dwIndex, DWORD64 dwValue); BOOL WriteNULL(DWORD dwIndex); IWbemClassObject **GetObjForIndicate() { return &m_pObj; } IWbemClassObject *GetObj() { return m_pObj; } _IWmiObject *GetWmiObj() { return m_pWmiObj; } HRESULT SetProp(DWORD dwIndex, DWORD dwSize, LPVOID pData) { return m_pWmiObj->SetPropByHandle( m_pProps[dwIndex].m_lHandle, 0, dwSize, pData); } protected: IWbemObjectAccess *m_pObjAccess; IWbemClassObject *m_pObj; _IWmiObject *m_pWmiObj; CPropArray m_pProps; }; #endif