/*++ Copyright (c) 1997 Microsoft Corporation Module Name: mdlib.hxx Abstract: This module contains global definitions and declarations for MDLIB. Author: Keith Moore (keithmo) 05-Feb-1997 Revision History: --*/ #ifndef _MDLIB_HXX_ #define _MDLIB_HXX_ // // Initialize a metabase record. // #define INITIALIZE_METADATA_RECORD(p,id,attr,utype,dtype,dlen,ptr) \ if( TRUE ) { \ (p)->dwMDIdentifier = (DWORD)(id); \ (p)->dwMDAttributes = (DWORD)(attr); \ (p)->dwMDUserType = (DWORD)(utype); \ (p)->dwMDDataType = (DWORD)(dtype); \ (p)->dwMDDataLen = (DWORD)(dlen); \ (p)->pbMDData = (unsigned char *)(ptr); \ } else // // "Safe" interface release. // #define RELEASE_INTERFACE(p) \ if( (p) != NULL ) { \ (p)->Release(); \ (p) = NULL; \ } else // // Timeout value for metabase open requests. // #define METABASE_OPEN_TIMEOUT 10000 // milliseconds // // Get the data pointer from a METADATA_GETALL_RECORD. // #define GETALL_POINTER(base,rec) \ (PVOID)( (PBYTE)(base) + (rec)->dwMDDataOffset ) // // Heap. // #define MdAllocMem(cb) (LPVOID)LocalAlloc( LPTR, (cb) ) #define MdFreeMem(ptr) (VOID)LocalFree( (HLOCAL)(ptr) ) // // Callback for admin object enumerator. // typedef BOOL (WINAPI * PFN_ADMIN_ENUM_CALLBACK)( IMSAdminBase * AdmCom, LPWSTR ObjectName, VOID * Context ); // // Base admin notification sink. // class BASE_ADMIN_SINK : public IMSAdminBaseSink { public: // // Usual constructor/destructor stuff. // BASE_ADMIN_SINK(); ~BASE_ADMIN_SINK(); // // Secondary constructor. // HRESULT Initialize( IN IUnknown * Object ); // // Unadvise if necessary. // HRESULT Unadvise( VOID ); // // IUnknown methods. // virtual HRESULT STDMETHODCALLTYPE QueryInterface( IN REFIID InterfaceId, OUT VOID ** Object ); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); // // Change notification callback. Note that this is a pure virtual and // must be defined by a derived class. // virtual HRESULT STDMETHODCALLTYPE SinkNotify( IN DWORD NumElements, IN MD_CHANGE_OBJECT ChangeList[] ) = 0; virtual HRESULT STDMETHODCALLTYPE ShutdownNotify( void) = 0; private: // // Object reference count. // LONG m_ReferenceCount; // // The sink cookie for this sink. This is required to "unadvise" the // sink. // DWORD m_SinkCookie; // // The connection point used for this sink. This is also required to // "unadvise" this sink. // IConnectionPoint * m_ConnectionPoint; }; // BASE_ADMIN_SINK; // // MD utility functions. // HRESULT MdGetAdminObject( OUT IMSAdminBase ** AdmCom ); HRESULT MdReleaseAdminObject( IN IMSAdminBase * AdmCom ); HRESULT MdEnumMetaObjects( IN IMSAdminBase * AdmCom, IN LPWSTR KeyName, IN PFN_ADMIN_ENUM_CALLBACK Callback, IN VOID * Context ); HRESULT MdGetAllMetaData( IN IMSAdminBase * AdmCom, IN METADATA_HANDLE Handle, IN LPWSTR Path, IN DWORD Attributes, OUT METADATA_GETALL_RECORD ** Data, OUT DWORD * NumEntries ); HRESULT MdFreeMetaDataBuffer( IN VOID * Data ); HRESULT MdGetInstanceState( IN IMSAdminBase * AdmCom, IN LPWSTR InstanceName, OUT DWORD * CurrentState, OUT DWORD * CurrentWin32Status ); HRESULT MdControlInstance( IN IMSAdminBase * AdmCom, IN LPWSTR InstanceName, IN DWORD Command ); HRESULT MdDisplayInstanceState( IN IMSAdminBase * AdmCom, IN LPWSTR InstanceName ); LPWSTR MdInstanceStateToString( IN DWORD State ); extern "C" { INT __cdecl wmain( INT argc, LPWSTR argv[] ); } // extern "C" #endif // _MDLIB_HXX_