Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) Microsoft Corporation
Module Name:
cassemblyrecoveryinfo.h
Abstract:
Author:
Environment:
Revision History:
--*/ #pragma once
class CAssemblyRecoveryInfo;
#include "fusionbuffer.h"
#include "csecuritymetadata.h"
#define WINSXS_INSTALL_SOURCE_BASEDIR (L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup")
#define WINSXS_INSTALL_SVCPACK_REGKEY (L"ServicePackSourcePath")
#define WINSXS_INSTALL_SOURCEPATH_REGKEY (L"SourcePath")
#define WINSXS_INSTALL_SOURCE_IS_CDROM (L"CDInstall")
class CAssemblyRecoveryInfo { private: CStringBuffer m_sbAssemblyDirectoryName; CSecurityMetaData m_SecurityMetaData; BOOL m_fLoadedAndReady; bool m_fHadCatalog; BOOL ResolveWinSourceMediaURL(PCWSTR wszSource, CBaseStringBuffer &rsbDestination) const; BOOL ResolveCDRomURL(PCWSTR wszSource, CBaseStringBuffer &rsbDestination) const;
enum CDRomSearchType { CDRST_Tagfile, CDRST_SerialNumber, CDRST_VolumeName };
public: CAssemblyRecoveryInfo() : m_fLoadedAndReady(FALSE), m_fHadCatalog(false) { }
BOOL Initialize() { FN_PROLOG_WIN32 m_sbAssemblyDirectoryName.Clear(); m_fLoadedAndReady = FALSE; IFW32FALSE_EXIT( m_SecurityMetaData.Initialize() );
FN_EPILOG }
const CSecurityMetaData &GetSecurityInformation() const { return m_SecurityMetaData; } CSecurityMetaData& GetSecurityInformation() { return m_SecurityMetaData; }
const CCodebaseInformationList& GetCodeBaseList() const { return m_SecurityMetaData.GetCodeBaseList(); } //protected:
CCodebaseInformationList& GetCodeBaseList() { return m_SecurityMetaData.GetCodeBaseList(); } public:
//
// Fill out this object from a registry key
//
BOOL AssociateWithAssembly(CBaseStringBuffer &rcbuffLoadFromKeyName, bool &rfNoAssembly);
//
// Take an existing value - sort of like "initialize"
//
BOOL CopyValue(const CAssemblyRecoveryInfo &rsrc);
//
// Cheap, but effective.
//
const CBaseStringBuffer &GetAssemblyDirectoryName() const { return m_sbAssemblyDirectoryName; } BOOL GetHasCatalog() const { return TRUE; } BOOL GetInfoPrepared() const { return m_fLoadedAndReady; }
//
// Setters - useful for registration
//
BOOL SetAssemblyIdentity(IN const CBaseStringBuffer &rsb) { return m_SecurityMetaData.SetTextualIdentity(rsb); } BOOL SetAssemblyIdentity( IN PCASSEMBLY_IDENTITY pcidAssembly );
VOID SetHasCatalog(IN BOOL fHasCatalog) { }
//
// Call this to try and resolve the internally listed codebase against
// the system and return it into sbFinalCodebase. Returns TRUE if the
// operation is successful, not based on whether the codebase is valid.
//
BOOL ResolveCodebase(CBaseStringBuffer &rsbFinalCodebase, SxsWFPResolveCodebase &rCodebaseType) const;
//
// Last bit of bookkeeping necessary before writing the assembly to disk
//
BOOL PrepareForWriting(); BOOL WriteSecondaryAssemblyInfoIntoRegistryKey(CRegKey & rhkRegistryNode) const; #define SXSP_WRITE_PRIMARY_ASSEMBLY_INFO_TO_REGISTRY_KEY_FLAG_REFRESH (0x00000001)
BOOL WritePrimaryAssemblyInfoToRegistryKey(ULONG Flags, CRegKey & rhkRegistryNode) const; BOOL ClearExistingRegistryData(); VOID RestorePreviouslyExistingRegistryData(); BOOL OpenInstallationSubKey(CFusionRegKey& hkSingleAssemblyInfo, DWORD OpenOrCreate, DWORD Access);
private: CAssemblyRecoveryInfo(const CAssemblyRecoveryInfo &); void operator =(const CAssemblyRecoveryInfo &); };
MAKE_CFUSIONARRAY_READY(CAssemblyRecoveryInfo, CopyValue);
/*
These are instantiated (in an unsearchable way) by the URLTAGINFO macro below. URLHEAD_WINSOURCE URLHEAD_FILE URLHEAD_CDROM URLHEAD_TAG URLHEAD_CDROM_TYPE_TAG URLHEAD_CDROM_TYPE_SERIALNUMBER URLHEAD_CDROM_TYPE_VOLUMENAME */ extern const UNICODE_STRING UnicodeString_URLHEAD_WINSOURCE;
#define URLTAGINFO( namevalue, str ) \
__declspec(selectany) extern const WCHAR URLHEAD_ ##namevalue [] = ( str ); \ static const SIZE_T URLHEAD_LENGTH_ ##namevalue = \ ( sizeof( URLHEAD_ ##namevalue ) / sizeof( WCHAR ) ) - 1;
//
// Move these to a .cpp file.
//
URLTAGINFO(FILE, L"file:") URLTAGINFO(CDROM, L"cdrom:") URLTAGINFO(WINSOURCE, L"x-ms-windows-source:") //URLTAGINFO(DARWINSOURCE, L"x-ms-darwin-source:")
URLTAGINFO(HTTP, L"http:")
// These things are not URL heads but nonetheless still use the same macro
URLTAGINFO(CDROM_TYPE_TAG, L"tagfile") URLTAGINFO(CDROM_TYPE_SERIALNUMBER, L"serialnumber") URLTAGINFO(CDROM_TYPE_VOLUMENAME, L"volumename")
BOOL SxspLooksLikeAssemblyDirectoryName( const CBaseStringBuffer &rsbDoesLookLikeName, BOOL &rbLooksLikeAssemblyName );
|