📄 basehand.h
字号:
*/
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 + -