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.
214 lines
8.6 KiB
214 lines
8.6 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
msmgen.h
|
|
|
|
Abstract:
|
|
|
|
header file for msm generation
|
|
|
|
Author:
|
|
|
|
Xiaoyu Wu(xiaoyuw) 01-Aug-2001
|
|
|
|
--*/
|
|
|
|
#define MAXDWORD 0xffffffff
|
|
#include "stdinc.h"
|
|
#include <msiquery.h>
|
|
|
|
#define FUSION_GENMSM_ACTION_WRITE_TABLES (0x00000001)
|
|
#define FUSION_GENMSM_ACTION_WRITE_CABITNET (0x00000002)
|
|
|
|
#define COMPONENT_TABLE (0x00000001)
|
|
#define DIRECTORY_TABLE (0x00000002)
|
|
#define FEATURECOMPONENTS_TABLE (0x00000004)
|
|
#define FILE_TABLE (0x00000008)
|
|
#define MODULESIGNATURE_TABLE (0x00000010)
|
|
#define MODULECOMPONENTS_TABLE (0x00000020)
|
|
#define MSIASSEMLBY_TABLE (0x00000040)
|
|
#define MSIASSEMLBYNAME_TABLE (0x00000080)
|
|
|
|
#define MERGEMODULE_CABINET_FILENAME L"MergeModule.CABinet"
|
|
#define SYSTEM_FOLDER L"SystemFolder"
|
|
#define MSM_TEMPLATE_BARN L"%ProgramFiles%\\msmgen\\templates\\msmgen"
|
|
#define MSMGEN_MSM_TEMPLATE L"%ProgramFiles%\\msmgen\\templates\\msmgen.msm"
|
|
#define MSM_TEMP_CABIN_FILE "%Temp%\\msm_temp_cabinet.tmp"
|
|
#define MSM_TEMP_CABIN_DIRECTORY_A "%Temp%\\msm_temp_cabinet_dir\\"
|
|
#define MSM_TEMP_CABIN_DIRECTORY_W L"%Temp%\\msm_temp_cabinet_dir\\"
|
|
|
|
#define MSIGUIDSTR_WITH_PREPEND_DOT 1
|
|
|
|
// {BA0505B5-9044-4919-A2DD-7D71EA8F8306}
|
|
#include "objbase.h"
|
|
DEFINE_GUID(MSM_GUID,
|
|
0xba0505b5, 0x9044, 0x4919, 0xa2, 0xdd, 0x7d, 0x71, 0xea, 0x8f, 0x83, 0x6);
|
|
|
|
typedef struct _ASSEMBLY_INFO_
|
|
{
|
|
CStringBuffer m_sbAssemblyPath; // always has a trailing slash
|
|
CSmallStringBuffer m_sbManifestFileName;
|
|
CSmallStringBuffer m_sbCatalogFileName;
|
|
CSmallStringBuffer m_sbLangID; // defualt value is 0 - netural language id
|
|
|
|
DWORD m_CchAssemblyPath;
|
|
DWORD m_CchManifestFileName;
|
|
DWORD m_CchCatalogFileName;
|
|
|
|
CSmallStringBuffer m_sbComponentID; // guid for the assembly, if not specified, gennerate a new guid
|
|
CSmallStringBuffer m_sbComponentIdentifier; // begin with AssemblyName, appended with .m_sbModuleGuidStr
|
|
BOOL m_fComponentTableSet;
|
|
}ASSEMBLY_INFO;
|
|
|
|
#include "fci.h"
|
|
#include "msi.h"
|
|
|
|
typedef struct _MSM_INFO
|
|
{
|
|
GUID m_guidModuleID;
|
|
CSmallStringBuffer m_sbModuleGuidStr; // prepend a "." before the numbers, since it is always used to append
|
|
HFCI m_hfci; // init to be NULL and finally call FCIDestory to destroy it
|
|
CSmallStringBuffer m_sbMsmFileName; // full-qualified path, default value is the same name as manifest with .msm
|
|
PMSIHANDLE m_hdb; // database handle for msm file, init as NULL
|
|
CSmallStringBuffer m_sbModuleIdentifier;
|
|
SHORT m_sLanguageID; // get this from AssemblyIdentity, if it is not specified, use the default value
|
|
CSmallStringBuffer m_sbCabinet; // fullpath of cabinet file
|
|
CStringBuffer m_sbMsmTemplateFile;
|
|
}MSM_INFO;
|
|
|
|
typedef HRESULT (*PFN_MSM_GEN_WORKER)(IXMLDOMNode* node);
|
|
typedef struct _MSM_DOMNODE_WORKER_
|
|
{
|
|
PCWSTR pwszNodeName;
|
|
PFN_MSM_GEN_WORKER pfn;
|
|
}MSM_DOMNODE_WORKER;
|
|
|
|
typedef HRESULT (__stdcall * PMSMGEN_ATTRIBUTE_CALLBACK_FUNC_PTR)(PCWSTR, PCWSTR);
|
|
|
|
typedef struct _ELEMENT_ALLOWED_ATTRIBUTE_{
|
|
PCWSTR m_name;
|
|
BOOL m_fRequired;
|
|
PMSMGEN_ATTRIBUTE_CALLBACK_FUNC_PTR m_callbackFunc;
|
|
BOOL m_fValued;
|
|
CSmallStringBuffer *m_value;
|
|
}ELEMENT_ALLOWED_ATTRIBUTE;
|
|
|
|
//
|
|
// extern variables
|
|
//
|
|
extern ASSEMBLY_INFO curAsmInfo;
|
|
extern MSM_INFO g_MsmInfo;
|
|
|
|
//
|
|
// extern functions
|
|
//
|
|
extern HRESULT PrepareMsmOutputFiles(PCWSTR);
|
|
extern HRESULT InitializeCabinetForWrite();
|
|
extern HRESULT AddFileToCabinetW(PCWSTR, SIZE_T, PCWSTR, SIZE_T);
|
|
extern HRESULT AddFileToCabinetA(PCSTR, SIZE_T, PCSTR, SIZE_T);
|
|
extern HRESULT EndMsmGeneration();
|
|
extern HRESULT OpenMsmFileForMsmGen(PCWSTR);
|
|
extern HRESULT GetMsiGUIDStrFromGUID(DWORD, GUID &, CSmallStringBuffer &);
|
|
extern HRESULT ExecuteQuerySQL(PCWSTR, PCWSTR, PCWSTR, BOOL &, MSIHANDLE *);
|
|
extern HRESULT ExecuteUpdateSQL(PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR);
|
|
extern HRESULT ExecuteInsertTableSQL(DWORD, UINT, ...);
|
|
extern HRESULT SetModuleID();
|
|
extern HRESULT PrepareMsm();
|
|
extern HRESULT SetComponentId(PCWSTR, PCWSTR);
|
|
extern HRESULT CloseCabinet();
|
|
extern HRESULT InsertCabinetIntoMsm();
|
|
extern HRESULT MoveFilesInCabinetA(char * sourceCabinet);
|
|
extern HRESULT CheckComponentTable();
|
|
|
|
//
|
|
// constant
|
|
//
|
|
#define OPT_DIRECTORY 0
|
|
#define OPT_COMPONENT 1
|
|
#define OPT_FILE 2
|
|
#define OPT_MSIASSEMBLY 3
|
|
#define OPT_MSIASSEMBLYNAME 4
|
|
#define OPT_MODULESIGNATURE 5
|
|
#define OPT_MODULECOMPONENTS 6
|
|
#define OPT_PROPERTY 7
|
|
#define OPT_PROGID 8
|
|
#define OPT_CLASS 9
|
|
#define OPT_TYPELIB 10
|
|
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_DIRECTORY 3
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_COMPONENT 4
|
|
// the acutal parameter-number for FILE_TABLE is 4 not 3,
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_FILE 3
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_MSIASSEMBLY 3
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_MSIASSEMBLYNAME 3
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_MODULESIGNATURE 2
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_MODULECOMPONENTS 2
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_PROPERTY 2
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_PROGID 3
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_CLASS 5
|
|
#define NUMBER_OF_PARAM_TO_INSERT_TABLE_TYPELIB 4
|
|
|
|
#define CATALOG_FILE_EXT L"cat"
|
|
#define MSM_FILE_EXT L"msm"
|
|
|
|
#define MSM_TEMPLATE 1
|
|
#define MSI_TEMPLATE 2
|
|
|
|
#define MSMGEN_COMCLASS_ATTRIBUTE_CLSID 0
|
|
#define MSMGEN_COMCLASS_ATTRIBUTE_DESCRIPTION 1
|
|
#define MSMGEN_COMCLASS_ATTRIBUTE_PROGID 2
|
|
#define MSMGEN_COMCLASS_ATTRIBUTE_TLBID 3
|
|
#define MSMGEN_COMCLASS_ATTRIBUTE_THREADINGMODULE 4
|
|
|
|
#define MSMGEN_ASSEMBLYIDENTTIY_ATTRIBUTE_NAME 0
|
|
#define MSMGEN_ASSEMBLYIDENTTIY_ATTRIBUTE_LANGUAGE 1
|
|
#define MSMGEN_ASSEMBLYIDENTTIY_ATTRIBUTE_VERSION 2
|
|
#define MSMGEN_ASSEMBLYIDENTTIY_ATTRIBUTE_PROCESSORARCHITECTURE 3
|
|
#define MSMGEN_ASSEMBLYIDENTTIY_ATTRIBUTE_PUBLICKEYTOKEN 4
|
|
#define MSMGEN_ASSEMBLYIDENTTIY_ATTRIBUTE_TYPE 5
|
|
|
|
#define MSMGEN_TYPELIB_ATTRIBUTE_TLBID 0
|
|
#define MSMGEN_TYPELIB_ATTRIBUTE_VERSION 1
|
|
#define MSMGEN_TYPELIB_ATTRIBUTE_HELPDIR 2
|
|
|
|
#define GUID_NULL_IN_STRING L"{00000000-0000-0000-0000-000000000000}"
|
|
|
|
|
|
//
|
|
// macro
|
|
//
|
|
#define WIN32_FUNC_END do {fSuccess = TRUE; Exit: return fSuccess;} while (0)
|
|
#define HRCOM_FUNC_END do {hr = S_OK; Exit: return hr;} while (0);
|
|
#define IDT_EXT L".idt"
|
|
|
|
#define DEFINE_ATTRIBUTE_MSM_INTERESTED(attributeName) \
|
|
{ \
|
|
L ## #attributeName, \
|
|
&MSM_PARSER_DOM_NODE_ ## attributeName \
|
|
}
|
|
|
|
#define DECLARE_FUNCTION(attributeName) \
|
|
HRESULT MSM_PARSER_DOM_NODE ## attributeName (IXMLDOMNode* node)
|
|
|
|
|
|
#define IFFALSE__MARKERROR_EXIT(x) if (!(x)) { hr = E_FAIL; goto Exit; }
|
|
|
|
#define CurrentAssemblyRealign\
|
|
do \
|
|
{ \
|
|
if (curAsmInfo.m_CchAssemblyPath != 0) \
|
|
{ \
|
|
curAsmInfo.m_sbAssemblyPath.Left(curAsmInfo.m_CchAssemblyPath); \
|
|
curAsmInfo.m_sbManifestFileName.Left(curAsmInfo.m_CchManifestFileName); \
|
|
curAsmInfo.m_sbCatalogFileName.Left(curAsmInfo.m_CchCatalogFileName); \
|
|
} \
|
|
} while (0)
|
|
|
|
|
|
#define MAKE_PCWSTR(x) PCWSTR(x)
|
|
#define ReportError printf
|
|
|
|
#include "macros.h"
|