📄 basehand.h
字号:
/************************************************************************ * Method: * IHXPluginHandler3::RemovePluginMountPoint * * Purpose: * */ STDMETHOD( RemovePluginMountPoint )( THIS_ const char* pName ); /************************************************************************ * Method: * IHXPluginHandler3::FindImplementationFromClassID * * Purpose: * Finds a CommonClassFactory plugin which supports the * ClassID given. An instance of the Class is returned. * The plugin instance is initialized with the specified * context */ STDMETHOD( FindImplementationFromClassID )( THIS_ REFGUID GUIDClassID, REF(IUnknown*) pIUnknownInstance, IUnknown* pIUnkOuter, IUnknown* pContext ); /************************************************************************ * Method: * IHXPluginHandler3::FindCLSIDFromName * * Purpose: * * Maps a text name to a CLSID based on information from * component plugins */ STDMETHOD( FindCLSIDFromName )( THIS_ const char* pName, REF(IHXBuffer*) pCLSID ); /************************************************************************ * Method: * IHXPluginHandler3::FindGroupOfPluginsUsingValues * * Purpose: * Builds a collection of plugins that match the criteria * */ STDMETHOD(FindGroupOfPluginsUsingValues)(THIS_ IHXValues* pValues, REF(IHXPluginSearchEnumerator*) pIEnumerator); /************************************************************************ * Method: * IHXPluginHandler3::FindGroupOfPluginsUsingStrings * * Purpose: * Builds a collection of plugins that match the criteria * */ STDMETHOD(FindGroupOfPluginsUsingStrings)(THIS_ char* PropName1, char* PropVal1, char* PropName2, char* PropVal2, char* PropName3, char* PropVal3, REF(IHXPluginSearchEnumerator*) pIEnumerator); /************************************************************************ * Method: * IHXPluginHandler3::GetPlugin * * Purpose: * Allocates a plugin based on index. Supports aggregation * */ STDMETHOD(GetPlugin)(THIS_ ULONG32 ulIndex, REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ); /************************************************************************ * Method: * IHXPluginHandler3::FindPluginUsingValues * * Purpose: * Allocates a plugin based on criteria. Supports aggregation * */ STDMETHOD(FindPluginUsingValues)(THIS_ IHXValues*, REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ); /************************************************************************ * Method: * IHXPluginHandler3::FindPluginUsingStrings * * Purpose: * Allocates a plugin based on criteria. Supports aggregation * */ STDMETHOD(FindPluginUsingStrings)(THIS_ char* PropName1, char* PropVal1, char* PropName2, char* PropVal2, char* PropName3, char* PropVal3, REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ); /************************************************************************ * Method: * IHXPluginHandler3::UnloadPluginFromClassID * * Purpose: * Finds a plugin from the classID and unloads it if it supports CanUnload2 * and returns TRUE in response to query */ STDMETHOD( UnloadPluginFromClassID )( THIS_ REFGUID GUIDClassID ); /************************************************************************ * Method: * IHXPluginHandler3::UnloadPackageByName * * Purpose: * finds a package from the name passed in and attempts to unload it. */ STDMETHOD (UnloadPackageByName) (const char* pName); //------------------------------------ Class Methods Errors Stat(const char* pszFilename, struct stat* pStatBuffer); IHXBuffer* ChecksumFile(char* pszFileName, IHXBuffer* pPathBuffer); IHXBuffer* ConvertToAsciiString(char* pBuffer, UINT32 nBuffLen); HX_RESULT FindGroupOfPluginsUsingStrings(char* PropName1, char* PropVal1, char* PropName2, char* PropVal2, char* PropName3, char* PropVal3, REF(CPluginEnumerator*) pEnumerator); HX_RESULT FindGroupOfPluginsUsingValues(IHXValues* pValues, REF(CPluginEnumerator*) pEnumerator); void ReportError( UINT8 severity, const char* pDLLName, const char* pDesc ); static const char* const zm_pszFileExtension; static const char* const zm_pszDirectorySeperator; static const char* const zm_pszValueSeperator; static const char* const zm_pszListStart; static const char* const zm_pszListEnd; static const char* const zm_pszValueSeperator2; static const char zm_cDirectorySeperator; static const char* const zm_pszKeyNameRegKey; static const char* const zm_pszRegKeySeperator; HX_RESULT ReloadPluginsNoPropagate(); HX_RESULT ReloadPluginsNoPropagateWithFindFile( PluginMountPoint* pMountPoint, CFindFile* pFileFinder, IHXBuffer* pPathBuffer, char* pszPluginDir); HX_RESULT ReloadPluginsNoPropagate( PluginMountPoint* pMountPoint );private: void UnloadDeadDLLs(void); Errors LoadDLL(char* pszDllName, PluginMountPoint* pMountPoint); void LoadPluginsFromComponentDLL( BaseHandler::PluginDLL* pPluginDll, IHXComponentPlugin* pIIterator ); // Methods to determine out of data DLLs BOOL FindPlugin(const char* pFileName, UINT32 nDLLIndex, REF(UINT32) nIndex); HX_RESULT AddToValues(IHXValues*, char* pPropName, char* pPropVal, eValueTypes eValueType); HX_RESULT RefreshPluginInfo( PluginMountPoint* pMountPoint ); CHXMapStringToOb m_MountPoints; CHXSimpleList m_PluginDLLList; CHXSimpleList m_PluginList; CHXSimpleList m_MiscDLLList; CHXMapStringToOb m_GUIDtoSupportList; IUnknown* m_pContext; class PluginMountPoint { public: PluginMountPoint( BaseHandler* pContext, const char* pName, UINT32 majorVersion, UINT32 minorVersion, IHXBuffer* pPath ); ~PluginMountPoint(); STDMETHOD_(ULONG32,AddRef)( THIS ); STDMETHOD_(ULONG32,Release)( THIS );#if !defined(_STATICALLY_LINKED) || defined(HELIX_CONFIG_CONSOLIDATED_CORE) IHXBuffer* Path();#endif private:#if !defined(_STATICALLY_LINKED) || defined(HELIX_CONFIG_CONSOLIDATED_CORE) IHXBuffer* m_pPath;#endif INT32 m_lRefCount; }; class PluginDLL : public IUnknown { public: PluginDLL(const char* pszFileName, PluginMountPoint* pMountPoint, BaseHandler* pBaseHandler); ~PluginDLL(); /* * IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj); STDMETHOD_(ULONG32,AddRef) (THIS); STDMETHOD_(ULONG32,Release) (THIS); Errors Load(IUnknown* pContext); HX_RESULT Unload(BOOL safe = TRUE); BOOL IsLoaded(); Errors CreateInstance( IUnknown** ppUnk, UINT32 uIndex ); UINT32 AddDLLReference(); UINT32 ReleaseDLLReference(); // Accessors void SetHash(char* phash) {m_hash = phash;} void SetFileSize(INT32 nSize) {m_nSizeBites = nSize;} PluginMountPoint* GetMountPoint() { return m_pMountPoint; } IHXBuffer* GetFileName(); INT32 GetFileSize() { return m_nSizeBites; } void SetNamespace(IHXBuffer* pNamespace); IHXBuffer* GetNamespace(); const char* GetHash() { return (const char*) m_hash; } CHXString const& GetPackageName () const { return m_packageName; } UINT32 GetNumPlugins() { return m_NumOfPlugins; } BOOL DoesExist() { return m_bDoesExist; } private: FPCREATEINSTANCE m_fpCreateInstance; FPSHUTDOWN m_fpShutdown; FPCANUNLOAD2 m_fCanUnload; PluginMountPoint* m_pMountPoint; IHXBuffer* m_pFileName; IHXBuffer* m_pNamespace; CHXString m_packageName; CHXString m_hash; LONG32 m_nSizeBites; INT32 m_lRefCount; UINT16 m_NumOfPlugins : 16; HX_BITFIELD m_bHas_factory : 1; HX_BITFIELD m_bLoaded : 1; BOOL m_bDoesExist; DLLAccess* m_pDLLAccess; UINT32 m_nActiveReferences; BaseHandler* m_pBaseHandler; }; class Plugin : public IUnknown { public: STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj); STDMETHOD_(ULONG32,AddRef) (THIS); STDMETHOD_(ULONG32,Release) (THIS); Plugin(IUnknown* pContext); ~Plugin(); // Exposed to the BaseHandler void SetPluginProperty(const char * pszPluginType); BOOL DoesMatch(IHXValues* pValues); Errors GetValuesFromDLL(IHXPlugin* pHXPlugin); // Creates an instance of the top-level plugin object Errors GetPlugin( REF(IUnknown*) ppUnknown ); // Checks to see if this is a component plugin and does the appropriate indirection Errors GetInstance(REF(IUnknown*) ppUnknown, IUnknown* pIUnkOuter = NULL ); HX_RESULT GetPluginInfo(REF(IHXValues*)); IHXBuffer* GetFileName(); BOOL IsLoaded(); void SetInfoNeedsRefresh(BOOL bRefresh) { m_bInfoNeedsRefresh = bRefresh;} void SetDLL(PluginDLL * pPluginDll); PluginDLL* GetDLL() {return m_pPluginDLL;} void SetIndex(UINT16 nIndex); UINT16 GetIndex() {return m_nPluginIndex;} void SetPropertyULONG32(char* , char*); void SetPropertyCString(char*, char*); void SetPropertyBuffer(char*, BYTE*, UINT32); // FIX This is to support the initialization of component plugins void InitializeComponentPlugin( IHXPlugin* pIPlugin, IHXValues* pIValues ); // void* because the client doesn't have these // XXXAH not supported currently... They were not in the old plugin handler either... // must be some code in the server that talks directly to this (BLEECH!) void* m_process; private: LONG32 m_lRefCount; UINT16 m_nPluginIndex; PluginDLL* m_pPluginDLL; IHXValues* m_pValues; HX_BITFIELD m_bCanUnload : 1; HX_BITFIELD m_bInfoNeedsRefresh : 1; IUnknown* m_pContext; IHXCommonClassFactory* m_pClassFactory; // Methods to retreive from the DLL Errors GetBasicValues(IHXPlugin* pHXPlugin); Errors GetExtendedValues(IHXPlugin* pHXPlugin); // Support Functions HX_RESULT CatStrings(char** pInStrings, REF(IHXBuffer*) pOutBuffer); BOOL AreBufferEqual(IHXBuffer* pBigBuff, IHXBuffer* pSmallBuff); Errors CreateWatcher(IUnknown* pUnknown); }; class OtherDLL { public: CHXString m_filename; CHXString m_fileChecksum; PluginMountPoint* m_pMountPoint; };};class CPluginEnumerator : public CUnknownIMP, public IHXPluginSearchEnumerator{public: CPluginEnumerator(); virtual ~CPluginEnumerator(); DECLARE_UNKNOWN_NOCREATE( CPluginEnumerator ) /* * IHXPluginSearchEnumerator */ STDMETHOD_(UINT32, GetNumPlugins)(THIS); STDMETHOD_(void, GoHead)(THIS); STDMETHOD(GetNextPlugin)( THIS_ REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ); STDMETHOD(GetNextPluginInfo)( THIS_ REF(IHXValues*) pRetValues ); STDMETHOD(GetPluginAt)( THIS_ UINT32 index, REF(IUnknown*) pIUnkResult, IUnknown* pIUnkOuter ); STDMETHOD(GetPluginInfoAt)( THIS_ UINT32 index, REF(IHXValues*) pRetValues ); //---------------- Class methods void Add(BaseHandler::Plugin* pPlugin); // FIX This is for backwards compatibility, and should be removed HX_RESULT GetNext(REF(IUnknown*) pRetUnk);protected:private: CHXSimpleList m_ListOfPlugins; UINT32 m_nIndex;};#endif /* _BASEHAND_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -