' ########################################################################################
' Microsoft Windows
' File: fusion.inc
' Contents: Fusion Interfaces
' Copyright (c) 2011 Jos? Roca
' Portions Copyright (c) Microsoft Corporation.
' All Rights Reserved.
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
' ########################################################################################
#IF NOT %DEF(PBX_fusion_PBI)
#DEFINE PBX_fusion_PBI
%EQUATE `FUSION_INC = 1
'/* header files for imported files */
#INCLUDE ONCE "Legacy/COM/ObjIdl.inc"
' enum ASM_CACHE_FLAGS
%EQUATE `ASM_CACHE_ZAP = &H1
%EQUATE `ASM_CACHE_GAC = &H2
%EQUATE `ASM_CACHE_DOWNLOAD = &H4
%EQUATE `ASM_CACHE_ROOT = &H8
' enum PEKIND
%EQUATE `peNone = 0
%EQUATE `peMSIL = &H1
%EQUATE `peI386 = &H2
%EQUATE `peIA64 = &H3
%EQUATE `peAMD64 = &H4
%EQUATE `peInvalid = &Hffffffff
' ########################################################################################
' Interface name = IAssemblyCache
' IID = E707DCDE-D1CD-11D2-BAB9-00C04F8ECEAE
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAssemblyCache_INTERFACE_DEFINED)
 %IAssemblyCache_INTERFACE_DEFINED = 1
$FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID = GUID$("{8CEDC215-AC4B-488B-93C0-A50A49CB2FB8}")
$FUSION_REFCOUNT_FILEPATH_GUID = GUID$("{B02F9D65-FB77-4F7A-AFA5-B391309F11C9}")
$FUSION_REFCOUNT_OPAQUE_STRING_GUID = GUID$("{2EC93463-B0C3-45E1-8364-327E96AEA856}")
' // this GUID cannot be used for installing into GAC.
$FUSION_REFCOUNT_MSI_GUID = GUID$("{25DF0FC1-7F97-4070-ADD7-4B13BBFD7CB8}")
$FUSION_REFCOUNT_OSINSTALL_GUID = GUID$("{D16D444C-56D8-11D5-882D-0080C847B195}")
' // Size = 32 bytes
TYPE FUSION_INSTALL_REFERENCE DWORD
 cbSize AS DWORD
 dwFlags AS DWORD
 guidScheme AS GUID ' GUID
 szIdentifier AS WSTRINGZ PTR
 szNonCannonicalData AS WSTRINGZ PTR
END TYPE
' // Size = 24 bytes
TYPE ASSEMBLY_INFO QWORD FILL
 cbAssemblyInfo AS DWORD ' ULONG
 dwAssemblyFlags AS DWORD
 uliAssemblySizeInKB AS QUAD ' ULARGE_INTEGER
 pszCurrentAssemblyPathBuf AS WSTRINGZ PTR
 cchBuf AS DWORD ' ULONG
END TYPE
%EQUATE `IASSEMBLYCACHE_INSTALL_FLAG_REFRESH = &H00000001
%EQUATE `IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH = &H00000002
%EQUATE `IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED = 1
%EQUATE `IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE = 2
%EQUATE `IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED = 3
%EQUATE `IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING = 4
%EQUATE `IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES = 5
%EQUATE `IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND = 6
%EQUATE `QUERYASMINFO_FLAG_VALIDATE = &H00000001
%EQUATE `QUERYASMINFO_FLAG_GETSIZE = &H00000002
%EQUATE `ASSEMBLYINFO_FLAG_INSTALLED = &H00000001
%EQUATE `ASSEMBLYINFO_FLAG_PAYLOADRESIDENT = &H00000002
$IID_IAssemblyCache = GUID$("{E707DCDE-D1CD-11D2-BAB9-00C04F8ECEAE}")
INTERFACE IAssemblyCache $IID_IAssemblyCache
 INHERIT IUnknown
 ' =====================================================================================
 METHOD UninstallAssembly ( ' VTable offset = 12
 BYVAL dwFlags AS DWORD
 , BYREF pszAssemblyName AS WSTRINGZ
 , BYREF pRefData AS FUSION_INSTALL_REFERENCE
 , BYREF pulDisposition AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD QueryAssemblyInfo ( ' VTable offset = 16
 BYVAL dwFlags AS DWORD
 , BYREF pszAssemblyName AS WSTRINGZ
 , BYREF pAsmInfo AS ASSEMBLY_INFO
 ) AS LONG
 ' =====================================================================================
 METHOD CreateAssemblyCacheItem ( ' VTable offset = 20
 BYVAL dwFlags AS DWORD
 , BYVAL pvReserved AS DWORD
 , BYREF ppAsmItem AS IAssemblyCacheItem
 , BYREF pszAssemblyName AS WSTRINGZ
 ) AS LONG
 ' =====================================================================================
 METHOD CreateAssemblyScavenger ( ' VTable offset = 24
 BYREF ppUnkReserved AS IUnknown
 ) AS LONG
 ' =====================================================================================
 METHOD InstallAssembly ( ' VTable offset = 28
 BYVAL dwFlags AS DWORD
 , BYREF pszManifestFilePath AS WSTRINGZ
 , BYREF pRefData AS FUSION_INSTALL_REFERENCE
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAssemblyCache_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAssemblyCacheItem
' IID = 9E3AAEB4-D1CD-11D2-BAB9-00C04F8ECEAE
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAssemblyCacheItem_INTERFACE_DEFINED)
 %IAssemblyCacheItem_INTERFACE_DEFINED = 1
%EQUATE `STREAM_FORMAT_COMPLIB_MODULE = 0
%EQUATE `STREAM_FORMAT_COMPLIB_MANIFEST = 1
%EQUATE `STREAM_FORMAT_WIN32_MODULE = 2
%EQUATE `STREAM_FORMAT_WIN32_MANIFEST = 4
%EQUATE `IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH = &H00000001
%EQUATE `IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH = &H00000002
%EQUATE `IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED = 1
%EQUATE `IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED = 2
%EQUATE `IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED = 3
$IID_IAssemblyCacheItem = GUID$("{9E3AAEB4-D1CD-11D2-BAB9-00C04F8ECEAE}")
INTERFACE IAssemblyCacheItem $IID_IAssemblyCacheItem
 INHERIT IUnknown
 ' =====================================================================================
 METHOD CreateStream ( ' VTable offset = 12
 BYVAL dwFlags AS DWORD
 , BYREF pszStreamName AS WSTRINGZ
 , BYVAL dwFormat AS DWORD
 , BYVAL dwFormatFlags AS DWORD
 , BYREF ppIStream AS IStream
 , BYVAL puliMaxSize AS QUAD
 ) AS LONG
 ' =====================================================================================
 METHOD Commit ( ' VTable offset = 16
 BYVAL dwFlags AS DWORD
 , BYREF pulDisposition AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD AbortItem ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAssemblyCacheItem_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAssemblyName
' IID = CD193BC0-B4BC-11D2-9833-00C04FC31D2E
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAssemblyName_INTERFACE_DEFINED)
 %IAssemblyName_INTERFACE_DEFINED = 1
' enum CREATE_ASM_NAME_OBJ_FLAGS
%EQUATE `CANOF_PARSE_DISPLAY_NAME = &H1
%EQUATE `CANOF_SET_DEFAULT_VALUES = &H2
%EQUATE `CANOF_VERIFY_FRIEND_ASSEMBLYNAME = &H4
%EQUATE `CANOF_PARSE_FRIEND_DISPLAY_NAME = %CANOF_PARSE_DISPLAY_NAME OR %CANOF_VERIFY_FRIEND_ASSEMBLYNAME
' enum ASM_NAME
%EQUATE `ASM_NAME_PUBLIC_KEY = 0
%EQUATE `ASM_NAME_PUBLIC_KEY_TOKEN = %ASM_NAME_PUBLIC_KEY + 1
%EQUATE `ASM_NAME_HASH_VALUE = %ASM_NAME_PUBLIC_KEY_TOKEN + 1
%EQUATE `ASM_NAME_NAME = %ASM_NAME_HASH_VALUE + 1
%EQUATE `ASM_NAME_MAJOR_VERSION = %ASM_NAME_NAME + 1
%EQUATE `ASM_NAME_MINOR_VERSION = %ASM_NAME_MAJOR_VERSION + 1
%EQUATE `ASM_NAME_BUILD_NUMBER = %ASM_NAME_MINOR_VERSION + 1
%EQUATE `ASM_NAME_REVISION_NUMBER = %ASM_NAME_BUILD_NUMBER + 1
%EQUATE `ASM_NAME_CULTURE = %ASM_NAME_REVISION_NUMBER + 1
%EQUATE `ASM_NAME_PROCESSOR_ID_ARRAY = %ASM_NAME_CULTURE + 1
%EQUATE `ASM_NAME_OSINFO_ARRAY = %ASM_NAME_PROCESSOR_ID_ARRAY + 1
%EQUATE `ASM_NAME_HASH_ALGID = %ASM_NAME_OSINFO_ARRAY + 1
%EQUATE `ASM_NAME_ALIAS = %ASM_NAME_HASH_ALGID + 1
%EQUATE `ASM_NAME_CODEBASE_URL = %ASM_NAME_ALIAS + 1
%EQUATE `ASM_NAME_CODEBASE_LASTMOD = %ASM_NAME_CODEBASE_URL + 1
%EQUATE `ASM_NAME_NULL_PUBLIC_KEY = %ASM_NAME_CODEBASE_LASTMOD + 1
%EQUATE `ASM_NAME_NULL_PUBLIC_KEY_TOKEN = %ASM_NAME_NULL_PUBLIC_KEY + 1
%EQUATE `ASM_NAME_CUSTOM = %ASM_NAME_NULL_PUBLIC_KEY_TOKEN + 1
%EQUATE `ASM_NAME_NULL_CUSTOM = %ASM_NAME_CUSTOM + 1
%EQUATE `ASM_NAME_MVID = %ASM_NAME_NULL_CUSTOM + 1
%EQUATE `ASM_NAME_FILE_MAJOR_VERSION = %ASM_NAME_MVID + 1
%EQUATE `ASM_NAME_FILE_MINOR_VERSION = %ASM_NAME_FILE_MAJOR_VERSION + 1
%EQUATE `ASM_NAME_FILE_BUILD_NUMBER = %ASM_NAME_FILE_MINOR_VERSION + 1
%EQUATE `ASM_NAME_FILE_REVISION_NUMBER = %ASM_NAME_FILE_BUILD_NUMBER + 1
%EQUATE `ASM_NAME_RETARGET = %ASM_NAME_FILE_REVISION_NUMBER + 1
%EQUATE `ASM_NAME_SIGNATURE_BLOB = %ASM_NAME_RETARGET + 1
%EQUATE `ASM_NAME_CONFIG_MASK = %ASM_NAME_SIGNATURE_BLOB + 1
%EQUATE `ASM_NAME_ARCHITECTURE = %ASM_NAME_CONFIG_MASK + 1
%EQUATE `ASM_NAME_MAX_PARAMS = %ASM_NAME_ARCHITECTURE + 1
' enum ASM_DISPLAY_FLAGS
%EQUATE `ASM_DISPLAYF_VERSION = &H1
%EQUATE `ASM_DISPLAYF_CULTURE = &H2
%EQUATE `ASM_DISPLAYF_PUBLIC_KEY_TOKEN = &H4
%EQUATE `ASM_DISPLAYF_PUBLIC_KEY = &H8
%EQUATE `ASM_DISPLAYF_CUSTOM = &H10
%EQUATE `ASM_DISPLAYF_PROCESSORARCHITECTURE = &H20
%EQUATE `ASM_DISPLAYF_LANGUAGEID = &H40
%EQUATE `ASM_DISPLAYF_RETARGET = &H80
%EQUATE `ASM_DISPLAYF_CONFIG_MASK = &H100
%EQUATE `ASM_DISPLAYF_MVID = &H200
%EQUATE `ASM_DISPLAYF_FULL = %ASM_DISPLAYF_VERSION OR %ASM_DISPLAYF_CULTURE OR %ASM_DISPLAYF_PUBLIC_KEY_TOKEN OR %ASM_DISPLAYF_RETARGET OR %ASM_DISPLAYF_PROCESSORARCHITECTURE
' enum ASM_CMP_FLAGS
%EQUATE `ASM_CMPF_NAME = &H1
%EQUATE `ASM_CMPF_MAJOR_VERSION = &H2
%EQUATE `ASM_CMPF_MINOR_VERSION = &H4
%EQUATE `ASM_CMPF_BUILD_NUMBER = &H8
%EQUATE `ASM_CMPF_REVISION_NUMBER = &H10
%EQUATE `ASM_CMPF_VERSION = %ASM_CMPF_MAJOR_VERSION OR %ASM_CMPF_MINOR_VERSION OR %ASM_CMPF_BUILD_NUMBER OR %ASM_CMPF_REVISION_NUMBER
%EQUATE `ASM_CMPF_PUBLIC_KEY_TOKEN = &H20
%EQUATE `ASM_CMPF_CULTURE = &H40
%EQUATE `ASM_CMPF_CUSTOM = &H80
%EQUATE `ASM_CMPF_DEFAULT = &H100
%EQUATE `ASM_CMPF_RETARGET = &H200
%EQUATE `ASM_CMPF_ARCHITECTURE = &H400
%EQUATE `ASM_CMPF_CONFIG_MASK = &H800
%EQUATE `ASM_CMPF_MVID = &H1000
%EQUATE `ASM_CMPF_SIGNATURE = &H2000
%EQUATE `ASM_CMPF_IL_ALL = %ASM_CMPF_NAME OR %ASM_CMPF_VERSION OR %ASM_CMPF_PUBLIC_KEY_TOKEN OR %ASM_CMPF_CULTURE
%EQUATE `ASM_CMPF_IL_NO_VERSION = %ASM_CMPF_NAME OR %ASM_CMPF_PUBLIC_KEY_TOKEN OR %ASM_CMPF_CULTURE
$IID_IAssemblyName = GUID$("{CD193BC0-B4BC-11D2-9833-00C04FC31D2E}")
INTERFACE IAssemblyName $IID_IAssemblyName
 INHERIT IUnknown
 ' =====================================================================================
 METHOD SetProperty ( ' VTable offset = 12
 BYVAL PropertyId AS DWORD
 , BYVAL pvProperty AS DWORD
 , BYVAL cbProperty AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetProperty ( ' VTable offset = 16
 BYVAL PropertyId AS DWORD
 , BYVAL pvProperty AS DWORD
 , BYREF pcbProperty AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Finalize ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD GetDisplayName ( ' VTable offset = 24
 BYREF szDisplayName AS WSTRINGZ
 , BYREF pccDisplayName AS DWORD
 , BYVAL dwDisplayFlags AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Reserved ( ' VTable offset = 28
 BYREF refIID AS GUID
 , BYVAL pUnkReserved1 AS IUnknown
 , BYVAL pUnkReserved2 AS IUnknown
 , BYREF szReserved AS WSTRINGZ
 , BYVAL llReserved AS QUAD
 , BYVAL pvReserved AS DWORD
 , BYVAL cbReserved AS DWORD
 , BYREF ppReserved AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 32
 BYREF lpcwBuffer AS DWORD
 , BYVAL pwzName AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 36
 BYREF pdwVersionHi AS DWORD
 , BYREF pdwVersionLow AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD IsEqual ( ' VTable offset = 40
 BYVAL pName AS IAssemblyName
 , BYVAL dwCmpFlags AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Clone ( ' VTable offset = 44
 BYREF pName AS IAssemblyName
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAssemblyName_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IAssemblyEnum
' IID = 21B8916C-F28E-11D2-A473-00C04F8EF448
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IAssemblyEnum_INTERFACE_DEFINED)
 %IAssemblyEnum_INTERFACE_DEFINED = 1
$IID_IAssemblyEnum = GUID$("{21B8916C-F28E-11D2-A473-00C04F8EF448}")
INTERFACE IAssemblyEnum $IID_IAssemblyEnum
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetNextAssembly ( ' VTable offset = 12
 BYVAL pvReserved AS DWORD
 , BYREF ppName AS IAssemblyName
 , BYVAL dwFlags AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Reset ( ' VTable offset = 16
 ) AS LONG
 ' =====================================================================================
 METHOD Clone ( ' VTable offset = 20
 BYREF ppEnum AS IAssemblyEnum
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IAssemblyEnum_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IInstallReferenceItem
' IID = 582DAC66-E678-449F-ABA6-6FAAEC8A9394
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IInstallReferenceItem_INTERFACE_DEFINED)
 %IInstallReferenceItem_INTERFACE_DEFINED = 1
$IID_IInstallReferenceItem = GUID$("{582DAC66-E678-449F-ABA6-6FAAEC8A9394}")
INTERFACE IInstallReferenceItem $IID_IInstallReferenceItem
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetReference ( ' VTable offset = 12
 BYREF ppRefData AS FUSION_INSTALL_REFERENCE
 , BYVAL dwFlags AS DWORD
 , BYVAL pvReserved AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IInstallReferenceItem_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IInstallReferenceEnum
' IID = 56B1A988-7C0C-4AA2-8639-C3EB5A90226F
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IInstallReferenceEnum_INTERFACE_DEFINED)
 %IInstallReferenceEnum_INTERFACE_DEFINED = 1
$IID_IInstallReferenceEnum = GUID$("{56B1A988-7C0C-4AA2-8639-C3EB5A90226F}")
INTERFACE IInstallReferenceEnum $IID_IInstallReferenceEnum
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetReference ( ' VTable offset = 12
 BYREF ppRefItem AS IInstallReferenceItem
 , BYVAL dwFlags AS DWORD
 , BYVAL pvReserved AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IInstallReferenceEnum_INTERFACE_DEFINED__ */
' enum AssemblyComparisonResult
%EQUATE `ACR_Unknown = 0
%EQUATE `ACR_EquivalentFullMatch = %ACR_Unknown + 1
%EQUATE `ACR_EquivalentWeakNamed = %ACR_EquivalentFullMatch + 1
%EQUATE `ACR_EquivalentFXUnified = %ACR_EquivalentWeakNamed + 1
%EQUATE `ACR_EquivalentUnified = %ACR_EquivalentFXUnified + 1
%EQUATE `ACR_NonEquivalentVersion = %ACR_EquivalentUnified + 1
%EQUATE `ACR_NonEquivalent = %ACR_NonEquivalentVersion + 1
%EQUATE `ACR_EquivalentPartialMatch = %ACR_NonEquivalent + 1
%EQUATE `ACR_EquivalentPartialWeakNamed = %ACR_EquivalentPartialMatch + 1
%EQUATE `ACR_EquivalentPartialUnified = %ACR_EquivalentPartialWeakNamed + 1
%EQUATE `ACR_EquivalentPartialFXUnified = %ACR_EquivalentPartialUnified + 1
%EQUATE `ACR_NonEquivalentPartialVersion = %ACR_EquivalentPartialFXUnified + 1
'STDAPI CreateAssemblyConfigCookie(LPCWSTR wzConfigFilePath, struct AssemblyConfig **ppAssemblyConfigOut);
'STDAPI DestroyAssemblyConfigCookie(struct AssemblyConfig *pAssemblyConfig);
' Not exported
'STDAPI CompareAssemblyIdentity(LPCWSTR pwzAssemblyIdentity1, BOOL fUnified1, LPCWSTR pwzAssemblyIdentity2, BOOL fUnified2, BOOL *pfEquivalent, AssemblyComparisonResult *pResult);
'DECLARE FUNCTION CompareAssemblyIdentity LIB "fusion.dll" ALIAS "CompareAssemblyIdentity" ( ' BYREF pwzAssemblyIdentity1 AS WSTRINGZ
' , BYVAL fUnified1 AS LONG
' , BYREF pwzAssemblyIdentity2 AS WSTRINGZ
' , BYVAL fUnified2 AS LONG
' , BYREF pfEquivalent AS LONG
' , BYREF pResult AS LONG
' ) AS LONG
'STDAPI CompareAssemblyIdentityWithConfig(LPCWSTR pwzAssemblyIdentity1, BOOL fUnified1, LPCWSTR pwzAssemblyIdentity2, BOOL fUnified2, struct AssemblyConfig *pAssemblyConfig, BOOL *pfEquivalent, AssemblyComparisonResult *pResult);
DECLARE FUNCTION CreateInstallReferenceEnum LIB "fusion.dll" ALIAS "CreateInstallReferenceEnum" ( BYREF ppRefEnum AS IInstallReferenceEnum , BYVAL pName AS IAssemblyName , BYVAL dwFlags AS QUAD , BYVAL pvReserved AS QUAD ) AS LONG
DECLARE FUNCTION CreateAssemblyEnum LIB "fusion.dll" ALIAS "CreateAssemblyEnum" ( BYREF pEnum AS IAssemblyEnum
 , BYVAL pUnkReserved AS IUnknown
 , BYVAL pName AS IAssemblyName
 , BYVAL dwFlags AS DWORD
 , BYVAL pvReserved AS DWORD
 ) AS LONG
DECLARE FUNCTION CreateAssemblyNameObject LIB "fusion.dll" ALIAS "CreateAssemblyNameObject" ( BYREF ppAssemblyNameObj AS IAssemblyName
 , BYREF szAssemblyName AS WSTRINGZ
 , BYVAL dwFlags AS DWORD
 , BYVAL pvReserved AS DWORD
 ) AS LONG
DECLARE FUNCTION CreateAssemblyCache LIB "fusion.dll" ALIAS "CreateAssemblyCache" ( BYREF ppAsmCache AS IAssemblyCache
 , BYVAL dwReserved AS DWORD
 ) AS LONG
DECLARE FUNCTION GetCachePath LIB "fusion.dll" ALIAS "GetCachePath" ( BYVAL dwCacheFlags AS DWORD
 , BYREF pwzCachePath AS WSTRINGZ
 , BYREF pcchPath AS DWORD
 ) AS LONG
' Not exported
'STDAPI GetAssemblyIdentityFromFile(LPCWSTR pwzFilePAth, REFIID riid, IUnknown **ppIdentity);
'DECLARE FUNCTION GetAssemblyIdentityFromFile LIB "fusion.dll" ALIAS "GetAssemblyIdentityFromFile" ( ' BYREF pwzFilePAth AS WSTRINGZ
' , BYREF riid AS GUID
' , BYREF ppIdentity AS IUnknown
' ) AS LONG
DECLARE FUNCTION ClearDownloadCache LIB "fusion.dll" ALIAS "ClearDownloadCache" ( ) AS LONG
#ENDIF
