windows-nt/Source/XPSP1/NT/shell/ext/occache/parseinf.h
2020-09-26 16:20:57 +08:00

180 lines
6.4 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Declaration of class CParseInf
//
// One instance of this class is created for each OCX being removed. It stores
// all the files associated with the OCX in a linked list. It also does the
// jobs of determining if the OCX is uninstallable and of the actual file
// removal.
#ifndef __PARSE_INF__
#define __PARSE_INF__
#include "filenode.h"
#include <pkgmgr.h>
#define REGSTR_COM_BRANCH "CLSID"
#define REGSTR_DOWNLOAD_INFORMATION "DownloadInformation"
#define REGSTR_DLINFO_INF_FILE "INF"
#define REGSTR_DLINFO_CODEBASE "CODEBASE"
#define REGSTR_PATH_DIST_UNITS "Software\\Microsoft\\Code Store Database\\Distribution Units"
#define REGSTR_DU_CONTAINS_FILES "Contains\\Files"
#define REGSTR_DU_CONTAINS_JAVA "Contains\\Java"
#define REGSTR_DU_CONTAINS_DIST_UNITS "Contains\\Distribution Units"
#define REGSTR_VALUE_INF "INF"
#define REGSTR_VALUE_OSD "OSD"
#define REGSTR_INSTALLED_VERSION "InstalledVersion"
#define REGSTR_VALUE_EXPIRE "Expire"
#define REGSTR_SHOW_ALL_FILES "ShowAllFiles"
#define MAX_REGPATH_LEN 2048
#define MAX_CONTROL_NAME_LEN 1024
#define MAX_MSGBOX_STRING_LEN 2048
#define MAX_MSGBOX_TITLE_LEN 256
#define BYTES_MAXSIZE 32
BOOL IsShowAllFilesEnabled();
void ToggleShowAllFiles();
class CParseInf
{
// Construction
public:
CParseInf();
~CParseInf();
// Data members
protected:
DWORD m_dwTotalFileSize;
DWORD m_dwFileSizeSaved;
DWORD m_dwStatus; // status value from the STATUS_CTRL set in <cleanoc.h>
int m_nTotalFiles;
CFileNode *m_pHeadFileList;
CFileNode *m_pCurFileNode;
CFileNode *m_pFileRetrievalPtr;
CPackageNode *m_pHeadPackageList;
CPackageNode *m_pCurPackageNode;
CPackageNode *m_pPackageRetrievalPtr;
TCHAR m_szInf[MAX_PATH];
TCHAR m_szFileName[MAX_PATH];
TCHAR m_szCLSID[MAX_CLSID_LEN];
BOOL m_bIsDistUnit;
BOOL m_bHasActiveX;
BOOL m_bHasJava;
IJavaPackageManager *m_pijpm;
BOOL m_bCoInit;
ULONG m_cExpireDays;
// Operations
public:
virtual HRESULT DoParse(
LPCTSTR szOCXFileName,
LPCTSTR szCLSID);
virtual HRESULT RemoveFiles(
LPCTSTR lpszTypeLibID = NULL,
BOOL bForceRemove = FALSE,
DWORD dwIsDistUnit = FALSE,
BOOL bSilent=FALSE);
virtual DWORD GetTotalFileSize() const;
virtual DWORD GetTotalSizeSaved() const;
virtual int GetTotalFiles() const;
virtual CFileNode* GetFirstFile();
virtual CFileNode* GetNextFile();
virtual CPackageNode* GetFirstPackage();
virtual CPackageNode* GetNextPackage();
virtual HRESULT DoParseDU(LPCTSTR szOCXFileName, LPCTSTR szCLSID);
virtual void SetIsDistUnit(BOOL bDist);
virtual BOOL GetIsDistUnit() const;
virtual DWORD GetStatus() const;
virtual BOOL GetHasActiveX(void) { return m_bHasActiveX; };
virtual BOOL GetHasJava(void) { return m_bHasJava; };
virtual ULONG GetExpireDays(void) { return m_cExpireDays; }
// private helper methods
protected:
void Init();
void DestroyFileList();
void DestroyPackageList();
HRESULT FindInf(LPTSTR szInf);
HRESULT EnumSections();
BOOL IsSectionInINF( LPCSTR lpCurCode);
HRESULT HandleSatellites(LPCTSTR pszFileName);
HRESULT GetFilePath(CFileNode* pFileNode);
HRESULT ParseSetupHook();
HRESULT ParseConditionalHook();
HRESULT ParseUninstallSection(LPCTSTR lpszSection);
HRESULT BuildDUFileList( HKEY hKeyDU );
HRESULT BuildDUPackageList( HKEY hKeyDU );
HRESULT BuildNamespacePackageList( HKEY hKeyNS, LPCTSTR szNamespace );
HRESULT CheckFilesRemovability(void);
HRESULT CheckLegacyRemovability( LONG *cOldSharedCount);
HRESULT CheckDURemovability( HKEY hkeyDU, BOOL bSilent=FALSE );
HRESULT RemoveLegacyControl( LPCTSTR lpszTypeLibID, BOOL bSilent=FALSE );
HRESULT RemoveDU( LPTSTR szFullName, LPCTSTR lpszTypeLibID, HKEY hkeyDUDB, BOOL bSilent=FALSE );
HRESULT CheckDUDependencies(HKEY hKeyDUDB, BOOL bSilent=FALSE);
};
///////////////////////////////////////////////////////////////////////////////
// Structure storing information about an ActiveX control.
//
// szName -- descriptive name of control (eg. "Circle control")
// szFile -- full filename of the control
// (eg. "C:\WINDOWS\OCCACHE\CIRC3.INF")
// szCLSID -- CLSID of control, in a string
// szTypeLibID -- TypeLib ID of the control, in a string
// dwTotalFileSize -- total size in bytes of all control-related files
// dwTotalSizeSaved -- total size in bytes restored when the control is removed
// cTotalFiles -- total number of control-related files, including the
// control itself
// parseInf -- pointer to an instance of class CParseInf, which does
// all the jobs of parsing the inf file and removing the
// control. Users of this struct should not in anyway
// manipulate this pointer.
//
class CCacheItem : public CParseInf
{
public:
TCHAR m_szName[LENGTH_NAME];
TCHAR m_szFile[MAX_PATH];
TCHAR m_szCLSID[MAX_DIST_UNIT_NAME_LEN];
TCHAR m_szTypeLibID[MAX_CLSID_LEN];
TCHAR m_szCodeBase[INTERNET_MAX_URL_LENGTH];
TCHAR m_szVersion[VERSION_MAXSIZE];
CCacheItem(void) {};
virtual ~CCacheItem(void) {};
virtual DWORD ItemType(void) const = 0;
};
class CCacheLegacyControl : public CCacheItem
{
public:
CCacheLegacyControl(void) {};
virtual ~CCacheLegacyControl(void) {};
static DWORD s_dwType;
virtual DWORD ItemType(void) const { return s_dwType; };
virtual HRESULT Init( HKEY hkeyCLSID, LPCTSTR szFile, LPCTSTR szCLSID );
};
class CCacheDistUnit : public CCacheLegacyControl
{
public:
CCacheDistUnit(void) {};
virtual ~CCacheDistUnit() {};
static DWORD s_dwType;
virtual DWORD ItemType(void) const { return s_dwType; };
virtual HRESULT Init( HKEY hkeyCLSID, LPCTSTR szFile, LPCTSTR szCLSID, HKEY hkeyDist, LPCTSTR szDU );
// override this - we'll do this work when we DoParseDU
virtual HRESULT DoParse( LPCTSTR szOCXFileName, LPCTSTR szCLSID ) { return S_OK; };
};
#endif