//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 2000.
//
//  File:
//      partitions.idl
//
//  Contents:
//      Definition of interfaces for partitions.
//
//  History:
//              SteveJam		01-22-2000		Created
//
//--------------------------------------------------------------------------


#ifndef DO_NO_IMPORTS
import "objidl.idl";
#endif


// some existing interfaces consolidated here from CLBCatQ.idl (COM+) and cat_int.idl (ole32)


//  IUserToken: interface on user token object
[
    object,
    local,
    pointer_default(unique),
    uuid(000001FC-0000-0000-C000-000000000046)
]
interface IUserToken : IUnknown
{
    HRESULT GetUserClassesRootKey ([out] HKEY *phKey);
    HRESULT ReleaseUserClassesRootKey (void);
    HRESULT GetUserSid ([out] BYTE **ppSid, [out] USHORT *pcbSid);
};


// IPartitionProperty: interface on partition object and partition context property
[
	object,
	local,
	pointer_default(unique),
	uuid(000001F2-0000-0000-C000-000000000046)
]
interface IPartitionProperty : IUnknown 
{
	HRESULT GetPartitionID([out] GUID* pGuid);
	HRESULT SetPartitionID([in] GUID* pGuid);
}


// IPartitionLookup: interface on catalog object for local partition lookup and validation
[
    object,
    local,
    pointer_default(unique),
    uuid(000001F8-0000-0000-C000-000000000046)
]
interface IPartitionLookup : IUnknown
{
	HRESULT GetDefaultPartitionForUser ([out] IPartitionProperty** ppPartitionProperty);
    HRESULT IsPartitionValidForUser ([in] GUID* pguidPartitionId, [out] BOOL* pfIsPartitionValid);
	HRESULT GetDefaultPartitionForUserByToken ([in] IUserToken *pUserToken, [out] IPartitionProperty** ppPartitionProperty);
    HRESULT IsPartitionValidForUserByToken ([in] IUserToken *pUserToken, [in] GUID* pguidPartitionId, [out] BOOL* pfIsPartitionValid);
    HRESULT IsLocalStoreEnabled([out] BOOL *pfEnabled);
    HRESULT IsDSLookupEnabled([out] BOOL *pfEnabled);
}


// IReplaceClassInfo: interface on activators to get replacement class info
[
    object,
    local,
    pointer_default(unique),
    uuid(000001FB-0000-0000-C000-000000000046)
]
interface IReplaceClassInfo : IUnknown
{
    HRESULT GetClassInfo ([in] REFGUID guidConfiguredClsid, [in] REFIID riid, [out] void** ppv);
}


// IGetCatalogObject: interface on act props to get the catalog
[
    object,
    local,
    pointer_default(unique),
    uuid(000001FE-0000-0000-C000-000000000046)
]
interface IGetCatalogObject : IUnknown
{
    HRESULT GetCatalogObject ([in] REFIID riid, [out] void** ppv);
}


// IComCatalogInternal: Required interface on catalog object.
[
	object,
	local,
	pointer_default(unique),
	uuid(a6304910-4115-11d2-8133-0060089f5fed)
]
interface IComCatalogInternal : IUnknown
{
	HRESULT GetClassInfo ([in] IUserToken *pUserToken,
						  [in] REFGUID guidConfiguredClsid, 
						  [in] REFIID riid,
						  [out] void** ppv,
						  [in] void* pvReserved);

	HRESULT GetApplicationInfo	([in] IUserToken *pUserToken,
								 [in] REFGUID guidApplId,
								 [in] REFIID riid,
								 [out] void** ppv,
								 [in] void* pvReserved);

	HRESULT GetProcessInfo ([in] IUserToken *pUserToken,
						    [in] REFGUID guidProcess, 
							[in] REFIID riid,
							[out] void** ppv,
							[in] void* pvReserved);

	HRESULT GetServerGroupInfo ([in] IUserToken *pUserToken,
								[in] REFGUID guidServerGroup, 
								[in] REFIID riid,
								[out] void** ppv,
								[in] void* pvReserved);

	HRESULT GetRetQueueInfo ([in] IUserToken *pUserToken,
							 [in,string] WCHAR* wszFormatName, 
							 [in] REFIID riid,
							 [out] void** ppv,
							 [in] void* pvReserved);

	HRESULT GetApplicationInfoForExe ([in] IUserToken *pUserToken,
									  [in,string] WCHAR* pwszExeName, 
									  [in] REFIID riid,
									  [out] void** ppv,
									  [in] void* pvReserved);

	HRESULT GetTypeLibrary ([in] IUserToken *pUserToken,
							[in] REFGUID guidTypeLib, 
							[in] REFIID riid,
							[out] void** ppv,
							[in] void* pvReserved);
    	
	HRESULT GetInterfaceInfo ([in] IUserToken *pUserToken, 
							[in] REFIID iidInterface, 
							[in] REFIID riid, 
							[out] void** ppv, 
							[in] void* pComCatalog);


	HRESULT FlushCache();

	HRESULT GetClassInfoFromProgId ([in] IUserToken *pUserToken, 
							[in] WCHAR *pwszProgID, 
							[in] REFIID riid, 
							[out] void **ppv, 
							[in] void* pComCatalog);
};


// IComCatalog2Internal: interface on catalog object for partition and application queries
[
    object,
    local,
    pointer_default(unique),
    uuid(3310dab4-edc0-4ce9-8a9c-8fea2980fd89)
]
interface IComCatalog2Internal : IUnknown
{
    HRESULT GetClassInfoByPartition ([in] IUserToken *pUserToken,  [in] REFGUID guidConfiguredClsid,
		[in] REFGUID guidPartitionId, [in] REFIID riid, [out] void** ppv, [in] void* pComCatalog);

    HRESULT GetClassInfoByApplication ([in] IUserToken *pUserToken, [in] REFGUID guidConfiguredClsid,
		[in] REFGUID guidPartitionId, [in] REFGUID guidApplId, [in] REFIID riid, [out] void** ppv, [in] void* pComCatalog);
}


// IComCatalogLocation: interface for notifying catalogs of their location (i.e., in SCM or not)
[
    object,
    local,
    pointer_default(unique),
    uuid(fae51051-9887-47f2-af44-7392bf90039b)
]
interface IComCatalogLocation : IUnknown
{
    HRESULT SetCatalogLocation ([in] BOOL bInSCM);
    HRESULT GetCatalogLocation ([out] BOOL* pbInSCM);
}


//  ICacheControl: debugging interface on some cachable objects
[
    object,
    local,
    pointer_default(unique),
    uuid(59a47420-0094-11d2-bbf7-0060089f5fed)
]
interface ICacheControl : IUnknown
{
    ULONG CacheAddRef(void);
    ULONG CacheRelease(void);
}


