180 lines
6.4 KiB
C++
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
|