6 Appendix A: Full IDL

For ease of implementation, the full Interface Definition Language (IDL) is provided below, where "ms-dtyp.idl" refers to the IDL found in [MS-DTYP] Appendix A, and "ms-oaut.idl" refers to the IDL found in [MS-OAUT] Appendix A.

The syntax uses the IDL syntax extensions defined in [MS-RPCE] sections 2.2.4 and 3.1.1.5. For example, as noted in [MS-RPCE] section 2.2.4.8, a pointer_default declaration is not required and pointer_default(unique) is assumed.

 import "ms-dtyp.idl";
 import "ms-oaut.idl";
  
 typedef struct
 {
   DWORD dataType;
   ULONG cbSize;
   DWORD flags;
 } PropertyMeta;
  
  
 typedef enum
 {
   eCT_UNKNOWN = 0x00000000,
   eCT_32BIT = 0x00000001, 
   eCT_64BIT = 0x00000002,
   eCT_NATIVE = 0x00001000
 } eComponentType;
  
  
 typedef struct
 {
   DWORD dwSRPLevel;
   [string] WCHAR* wszFriendlyName;
 } SRPLevelInfo;
  
  
 typedef enum
 {
   css_lb = 1
 } CatSrvServices;
  
  
 typedef enum
 {
   css_serviceStopped = 0,
   css_serviceStartPending = 1,
   css_serviceStopPending = 2,
   css_serviceRunning = 3,
   css_serviceContinuePending = 4,
   css_servicePausePending = 5,
   css_servicePaused = 6,
   css_serviceUnknownState = 7
 } CatSrvServiceState;
  
  
 typedef struct
 {
   GUID ConglomerationID;
   GUID PartitionID;
   GUID ContainerID;
   DWORD dwProcessID;
   BOOL bPaused;
   BOOL bRecycled;
 } InstanceContainer;
  
  
 [
     object,
     uuid(182C40FA-32E4-11D0-818B-00A0C9231C29),
     pointer_default(unique)
 ]
 interface ICatalogSession: IUnknown
 {
   HRESULT Opnum3NotUsedOnWire();
   HRESULT Opnum4NotUsedOnWire();
   HRESULT Opnum5NotUsedOnWire();
   HRESULT Opnum6NotUsedOnWire();
  
   HRESULT InitializeSession(
     [in] float flVerLower,
     [in] float flVerUpper,
     [in] long reserved,
     [out] float* pflVerSession
   );
  
   HRESULT GetServerInformation(
     [out] long* plReserved1,
     [out] long* plReserved2,
     [out] long* plReserved3,
     [out] long* plMultiplePartitionSupport,
     [out] long* plReserved4,
     [out] long* plReserved5
   );
 };
  
  
 [
     object,
     uuid(1D118904-94B3-4A64-9FA6-ED432666A7B9),
     pointer_default(unique)
 ]
 interface ICatalog64BitSupport: IUnknown
 {
   HRESULT SupportsMultipleBitness(
     [out] BOOL* pbSupportsMultipleBitness
   );
  
   HRESULT Initialize64BitQueryCellSupport(
     [in] BOOL bClientSupports64BitQueryCells,
     [out] BOOL* pbServerSupports64BitQueryCells
   );
 };
  
  
 [
     object,
     uuid(A8927A41-D3CE-11D1-8472-006008B0E5CA),
     pointer_default(unique)
 ]
 interface ICatalogTableInfo: IUnknown
 {
   HRESULT GetClientTableInfo(
     [in] GUID* pCatalogIdentifier,
     [in] GUID* pTableIdentifier,
     [in] DWORD tableFlags,
     [in, size_is(cbQueryCellArray), unique] char* pQueryCellArray,
     [in] ULONG cbQueryCellArray,
     [in, size_is(cbQueryComparison), unique] char* pQueryComparison,
     [in] ULONG cbQueryComparison,
     [in] DWORD eQueryFormat,
     [out] GUID* pRequiredFixedGuid,
     [out, size_is( , *pcbReserved1)] char** ppReserved1,
     [out] ULONG* pcbReserved1,
     [out, size_is( , *pcAuxiliaryGuid)] GUID** ppAuxiliaryGuid,
     [out] ULONG* pcAuxiliaryGuid,
     [out, size_is( , *pcProperties)] PropertyMeta** ppPropertyMeta,
     [out] ULONG* pcProperties,
     [out] IID* piid,
     [out, iid_is(piid)] void** pItf,
     [out, size_is( , *pcbReserved2)] char** ppReserved2,
     [out] ULONG* pcbReserved2
   );
 };
  
  
 [
     object,
     uuid(0E3D6630-B46B-11D1-9D2D-006008B0E5CA),
     pointer_default(unique)
 ]
 interface ICatalogTableRead: IUnknown
 {
   HRESULT ReadTable(
     [in] GUID* pCatalogIdentifier,
     [in] GUID* pTableIdentifier,
     [in] DWORD tableFlags,
     [in, size_is(cbQueryCellArray), unique] char* pQueryCellArray,
     [in] ULONG cbQueryCellArray,
     [in, size_is(cbQueryComparison), unique] char* pQueryComparison,
     [in] ULONG cbQueryComparison,
     [in] DWORD eQueryFormat,
     [out, size_is( , *pcbTableDataFixed)] char** ppTableDataFixed,
     [out] ULONG* pcbTableDataFixed,
     [out, size_is( , *pcbTableDataVariable)] char** ppTableDataVariable,
     [out] ULONG* pcbTableDataVariable,
     [out, size_is( , *pcbTableDetailedErrors)] char** ppTableDetailedErrors,
     [out] ULONG* pcbTableDetailedErrors,
     [out, size_is( , *pcbReserved1)] char** ppReserved1,
     [out] ULONG* pcbReserved1,
     [out, size_is( , *pcbReserved2)] char** ppReserved2,
     [out] ULONG* pcbReserved2
   );
 };
  
  
 [
     object,
     uuid(0E3D6631-B46B-11D1-9D2D-006008B0E5CA),
     pointer_default(unique)
 ]
 interface ICatalogTableWrite: IUnknown
 {
   HRESULT WriteTable(
     [in] GUID* pCatalogIdentifier,
     [in] GUID* pTableIdentifier,
     [in] DWORD tableFlags,
     [in, size_is(cbQueryCellArray), unique] char* pQueryCellArray,
     [in] ULONG cbQueryCellArray,
     [in, size_is(cbQueryComparison), unique] char* pQueryComparison,
     [in] ULONG cbQueryComparison,
     [in] DWORD eQueryFormat,
     [in, size_is(cbTableDataFixedWrite)] char* pTableDataFixedWrite,
     [in] ULONG cbTableDataFixedWrite,
     [in, size_is(cbTableDataVariable)] char* pTableDataVariable,
     [in] ULONG cbTableDataVariable,
     [in, size_is(cbReserved1)] char* pReserved1,
     [in] ULONG cbReserved1,
     [in, size_is(cbReserved2)] char* pReserved2,
     [in] ULONG cbReserved2,
     [in, size_is(cbReserved3)] char* pReserved3,
     [in] ULONG cbReserved3,
     [out, size_is( , *pcbTableDetailedErrors)] char** ppTableDetailedErrors,
     [out] ULONG* pcbTableDetailedErrors
   );
 };
  
  
 [
     object,
     uuid(8DB2180E-BD29-11D1-8B7E-00C04FD7A924),
     pointer_default(unique)
 ]
 interface IRegister: IUnknown
 {
   HRESULT RegisterModule(
     [in] GUID ConglomerationIdentifier,
     [in, string, size_is(cModules,)] LPWSTR* ppModules,
     [in] DWORD cModules,
     [in] DWORD dwFlags,
     [in, size_is(cRequested), unique] GUID* pRequestedCLSIDs,
     [in] DWORD cRequested,
     [out, size_is(,cModules)] DWORD** ppModuleFlags,
     [out] DWORD* pcResults,
     [out, size_is(,*pcResults)] GUID** ppResultCLSIDs,
     [out, string, size_is(,*pcResults)] LPWSTR** ppResultNames,
     [out, size_is(,*pcResults)] DWORD** ppResultFlags,
     [out, size_is(,*pcResults)] LONG** ppResultHRs
   );
  
   HRESULT Opnum4NotUsedOnWire();
 };
  
  
 [
     object,
     uuid(971668DC-C3FE-4EA1-9643-0C7230F494A1),
     pointer_default(unique)
 ]
 interface IRegister2: IUnknown
 {
   HRESULT CreateFullConfiguration(
     [in, string] LPCWSTR pwszConglomerationIdOrName,
     [in, string] LPCWSTR pwszCLSIDOrProgId,
     [in] eComponentType ctComponentType
   );
  
   HRESULT CreateLegacyConfiguration(
     [in, string] LPCWSTR pwszConglomerationIdOrName,
     [in, string] LPCWSTR pwszCLSIDOrProgId,
     [in] eComponentType ctComponentType
   );
  
   HRESULT PromoteLegacyConfiguration(
     [in, string] LPCWSTR pwszConglomerationIdOrName,
     [in, string] LPCWSTR pwszCLSIDOrProgId,
     [in] eComponentType ctComponentType
   );
  
   HRESULT Opnum6NotUsedOnWire();
   HRESULT Opnum7NotUsedOnWire();
  
   HRESULT RegisterModule2(
     [in] GUID ConglomerationIdentifier,
     [in] GUID PartitionIdentifier,
     [in, string, size_is(cModules,)] LPWSTR* ppModules,
     [in] DWORD cModules,
     [in] DWORD dwFlags,
     [in, size_is(cRequested), unique] GUID* pRequestedCLSIDs,
     [in] DWORD cRequested,
     [out, size_is(,cModules)] DWORD** ppModuleFlags,
     [out] DWORD* pcResults,
     [out, size_is(,*pcResults)] GUID** ppResultCLSIDs,
     [out, string, size_is(,*pcResults)] LPWSTR** ppResultNames,
     [out, size_is(,*pcResults)] DWORD** ppResultFlags,
     [out, size_is(,*pcResults)] LONG** ppResultHRs
   );
  
   HRESULT Opnum9NotUsedOnWire();
 };
  
  
 [
     object,
     uuid(C2BE6970-DF9E-11D1-8B87-00C04FD7A924),
     pointer_default(unique)
 ]
 interface IImport: IUnknown
 {
   HRESULT ImportFromFile(
     [in, string, unique] WCHAR* pwszModuleDestination,
     [in, string] WCHAR* pwszInstallerPackage,
     [in, string, unique] WCHAR* pwszUser,
     [in, string, unique] WCHAR* pwszPassword,
     [in, string, unique] WCHAR* pwszRemoteServerName,
     [in] DWORD dwFlags,
     [in] GUID* reserved1,
     [in] DWORD reserved2,
     [out] DWORD* pcModules,
     [out, size_is(,*pcModules)] DWORD** ppModuleFlags,
     [out, string, size_is(,*pcModules)] LPWSTR** ppModules,
     [out] DWORD* pcComponents,
     [out, size_is(,*pcComponents)] GUID** ppResultCLSIDs,
     [out, string, size_is(,*pcComponents)] LPWSTR** ppResultNames,
     [out, size_is(,*pcComponents)] DWORD** ppResultFlags,
     [out, size_is(,*pcComponents)] LONG** ppResultHRs
   );
  
   HRESULT QueryFile(
     [in, string] WCHAR* pwszInstallerPackage,
     [out] DWORD* pdwConglomerations,
     [out, string, size_is(, *pdwConglomerations)] LPWSTR** ppNames,
     [out, string, size_is(, *pdwConglomerations)] LPWSTR** ppDescriptions,
     [out] DWORD* pdwUsers,
     [out] DWORD* pdwIsProxy,
     [out] DWORD* pcModules,
     [out, string, size_is(,*pcModules)] LPWSTR** ppModules
   );
  
   HRESULT Opnum5NotUsedOnWire();
   HRESULT Opnum6NotUsedOnWire();
 };
  
  
 [
     object,
     uuid(1F7B1697-ECB2-4CBB-8A0E-75C427F4A6F0),
     pointer_default(unique)
 ]
 interface IImport2: IUnknown
 {
   HRESULT SetPartition(
     [in] GUID* pPartitionIdentifier,
     [out] GUID* pReserved
   );
  
   HRESULT Opnum4NotUsedOnWire();
   HRESULT Opnum5NotUsedOnWire();
 };
  
  
 [
     object,
     uuid(CFADAC84-E12C-11D1-B34C-00C04F990D54),
     pointer_default(unique)
 ]
 interface IExport: IUnknown
 {
   HRESULT ExportConglomeration(
     [in] GUID* pConglomerationIdentifier,
     [in] LPCWSTR pwszInstallerPackage,
     [in] LPCWSTR pwszReserved,
     [in] DWORD dwFlags
   );
  
   HRESULT Opnum4NotUsedOnWire();
   HRESULT Opnum5NotUsedOnWire();
   HRESULT Opnum6NotUsedOnWire();
 };
  
  
 [
     object,
     uuid(F131EA3E-B7BE-480E-A60D-51CB2785779E),
     pointer_default(unique)
 ]
 interface IExport2: IUnknown
 {
   HRESULT ExportPartition(
     [in] GUID* pPartitionIdentifier,
     [in] LPCWSTR pwszInstallerPackage,
     [in] LPCWSTR pwszReserved,
     [in] DWORD dwFlags
   );
 };
  
  
 [
     object,
     uuid(7F43B400-1A0E-4D57-BBC9-6B0C65F7A889),
     pointer_default(unique)
 ]
 interface IAlternateLaunch: IUnknown
 {
   HRESULT CreateConfiguration(
     [in] GUID ConglomerationIdentifier,
     [in] BSTR bstrConfigurationName,
     [in] DWORD dwStartType,
     [in] DWORD dwErrorControl,
     [in] BSTR bstrDependencies,
     [in] BSTR bstrRunAs,
     [in] BSTR bstrPassword,
     [in] VARIANT_BOOL bDesktopOk
   );
  
   HRESULT DeleteConfiguration(
     [in] GUID ConglomerationIdentifier
   );
 };
  
  
 [
     object,
     uuid(456129E2-1078-11D2-B0F9-00805FC73204),
     pointer_default(unique)
 ]
 interface ICatalogUtils: IUnknown
 {
   HRESULT ValidateUser(
     [in, string, unique] LPWSTR pwszPrincipalName,
     [in, string, unique] LPWSTR pwszPassword 
   );
  
   HRESULT WaitForEndWrites();
  
   HRESULT GetEventClassesForIID(
     [in, string, unique] LPWSTR wszIID,
     [out] DWORD* pcClasses,
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszCLSIDs,
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszProgIDs,
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszDescriptions
   );
 };
  
  
 [
     object,
     uuid(C726744E-5735-4F08-8286-C510EE638FB6),
     pointer_default(unique)
 ]
 interface ICatalogUtils2: IUnknown
 {
   HRESULT CopyConglomerations(
     [in, string] LPCWSTR pwszSourcePartition,
     [in, string] LPCWSTR pwszDestPartition,
     [in] DWORD cConglomerations,
     [in, string, size_is(cConglomerations,)] LPCWSTR* ppwszConglomerationNamesOrIds
   );
  
   HRESULT CopyComponentConfiguration(
     [in, string] LPCWSTR pwszSourceConglomeration,
     [in, string] LPCWSTR pwszComponent,
     [in, string] LPCWSTR pwszDestConglomeration
   );
  
   HRESULT AliasComponent(
     [in, string] LPCWSTR pwszSourceConglomeration,
     [in, string] LPCWSTR pwszComponent,
     [in, string] LPCWSTR pwszDestConglomeration,
     [in] GUID* pNewCLSID,
     [in, string] LPCWSTR pwszNewProgID
   );
  
   HRESULT MoveComponentConfiguration(
     [in, string] LPCWSTR pwszSourceConglomeration,
     [in, string] LPCWSTR pwszComponent,
     [in, string] LPCWSTR pwszDestinationConglomeration
   );
  
   HRESULT GetEventClassesForIID2(
     [in, string, unique] LPWSTR wszIID, 
     [in] GUID* PartitionId,
     [out] DWORD* pcClasses, 
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszCLSIDs,
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszProgIDs, 
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszDescriptions,
     [out, string, size_is(, *pcClasses)] LPWSTR** pawszConglomerationIDs,
     [out, size_is(, *pcClasses)] DWORD** padwIsPrivate
   );
  
   HRESULT IsSafeToDelete(
     [in] BSTR bstrFile,
     [out, retval] long* pInUse
   );
  
   HRESULT FlushPartitionCache();
  
   HRESULT EnumerateSRPLevels(
     [in] LCID Locale,
     [out] int *cLevels,
     [out, size_is(,*cLevels)] SRPLevelInfo **aSRPLevels
   );
  
   HRESULT GetComponentVersions(
     [in]  LPCWSTR  pwszClsidOrProgId,
     [out] DWORD*   pdwVersions,
     [out, size_is(, *pdwVersions)] GUID** ppPartitionIDs,
     [out, size_is(, *pdwVersions)] GUID** ppConglomerationIDs,
     [out, size_is(, *pdwVersions)] BOOL** ppIsPrivate,
     [out, size_is(, *pdwVersions)] LONG** ppBitness
   );
 };
  
  
 [
     object,
     uuid(47CDE9A1-0BF6-11D2-8016-00C04FB9988E),
     pointer_default(unique)
 ]
 interface ICapabilitySupport: IUnknown
 {
   HRESULT Start(
     [in] CatSrvServices i_css
   );
  
   HRESULT Stop(
     [in] CatSrvServices i_css
   );
  
   HRESULT Opnum5NotUsedOnWire();
   HRESULT Opnum6NotUsedOnWire();
  
   HRESULT IsInstalled(
     [in] CatSrvServices i_css,
     [out] ULONG* pulStatus
   );
  
   HRESULT IsRunning(
     [in] CatSrvServices i_css,
     [out] CatSrvServiceState* pulStates
   );
  
   HRESULT Opnum9NotUsedOnWire();
 };
  
  
 [
     object,
     uuid(3F3B1B86-DBBE-11D1-9DA6-00805F85CFE3),
     pointer_default(unique)
 ]
 interface IContainerControl: IUnknown
 {
   HRESULT CreateContainer(
     [in] GUID* pConglomerationIdentifier
   );
  
   HRESULT ShutdownContainers(
     [in] GUID* pConglomerationIdentifier
   );
  
   HRESULT RefreshComponents();
 };
  
  
 [
     object,
     uuid(6C935649-30A6-4211-8687-C4C83E5FE1C7),
     pointer_default(unique)
 ]
 interface IContainerControl2: IUnknown
 {
   HRESULT ShutdownContainer(
     [in] GUID* ContainerIdentifier
   );
  
   HRESULT PauseContainer(
     [in] GUID* ContainerIdentifier
   );
  
   HRESULT ResumeContainer(
     [in] GUID* ContainerIdentifier
   );
  
   HRESULT IsContainerPaused(
     [in] GUID* ContainerIdentifier,
     [out] BOOL* bPaused
   );
  
   HRESULT GetRunningContainers(
     [in] GUID* PartitionId, 
     [in] GUID* ConglomerationId, 
     [out] DWORD* pdwNumContainers, 
     [out, size_is(,*pdwNumContainers)] InstanceContainer** ppContainers
   );
  
   HRESULT GetContainerIDFromProcessID(
     [in] DWORD dwPID,
     [out, retval] BSTR* pbstrContainerID
   );
  
   HRESULT RecycleContainer(
     [in] GUID* ContainerIdentifier,
     [in] long lReasonCode
   );
  
   HRESULT GetContainerIDFromConglomerationID(
     [in] GUID* ConglomerationIdentifier,
     [out] GUID* ContainerIdentifier
   );
 };
  
  
 [
   object,
   uuid(98315903-7BE5-11D2-ADC1-00A02463D6E7),
   pointer_default(unique)
 ]
 interface IReplicationUtil: IUnknown
 {
   HRESULT CreateShare(
     [in] LPCWSTR pwszShareName,
     [in] LPCWSTR pwszPath
   );
  
   HRESULT CreateEmptyDir(
     [in] LPCWSTR pwszPath
   );
  
   HRESULT RemoveShare(
     [in] LPCWSTR pwszShareName
   );
  
   HRESULT BeginReplicationAsTarget(
     [in] LPCWSTR pwszBaseReplicationDir
   );
  
   HRESULT QueryConglomerationPassword(
     [in] REFGUID ConglomerationId,
     [out, size_is( , *pcbPassword)] char** ppvPassword,
     [out] ULONG* pcbPassword
   );
  
   HRESULT CreateReplicationDir(
     [out] LPWSTR* ppwszBaseReplicationDir
   );
 };