xpmgr/BuildTools/Include/functiondiscoveryprovider.idl

247 lines
8.8 KiB
Plaintext

//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
import "oaidl.idl";
import "ocidl.idl";
import "propsys.idl";
import "FunctionDiscoveryAPI.idl";
interface IFunctionDiscoveryProviderFactory;
interface IFunctionDiscoveryProviderQuery;
interface IProviderQueryConstraintCollection;
interface IProviderPropertyConstraintCollection;
/////////////////////////////////////////////////////////////////////////////
//
// The following interfaces are implemented by discovery providers only.
// Only the IFunctionDiscoveryProvider interface is required.
//
/////////////////////////////////////////////////////////////////////////////
[
object,
uuid(dcde394f-1478-4813-a402-f6fb10657222),
helpstring("IFunctionDiscoveryProvider Interface"),
pointer_default(unique),
restricted
]
interface IFunctionDiscoveryProvider : IUnknown
{
HRESULT Initialize(
[in] IFunctionDiscoveryProviderFactory * pIFunctionDiscoveryProviderFactory,
[in] IFunctionDiscoveryNotification * pIFunctionDiscoveryNotification,
[in] LCID lcidUserDefault,
[out] DWORD * pdwStgAccessCapabilities ); // if -1 - InstancePropertyStoreValidateAccess will be used for each FI
HRESULT Query(
[in] IFunctionDiscoveryProviderQuery * pIFunctionDiscoveryProviderQuery,
[out] IFunctionInstanceCollection ** ppIFunctionInstanceCollection );
HRESULT EndQuery();
HRESULT InstancePropertyStoreValidateAccess(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] const DWORD dwStgAccess );
HRESULT InstancePropertyStoreOpen(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] const DWORD dwStgAccess,
[out] IPropertyStore ** ppIPropertyStore );
HRESULT InstancePropertyStoreFlush(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext );
HRESULT InstanceQueryService(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] REFGUID guidService,
[in] REFIID riid,
[out, iid_is(riid)] IUnknown ** ppIUnknown );
HRESULT InstanceReleased(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext );
};
// Providers that want to directly impement a property store may do so by implementing this interface.
// All calls to the API-exposed property store will go directly to the provider.
//
// If a provider does not implement this interface, then the provider must provide a property store
// at CreatingInstance time or as a last resort in response to InstanceOpenPropertyStore.
[
object,
uuid(cf986ea6-3b5f-4c5f-b88a-2f8b20ceef17),
helpstring("IProviderProperties Interface"),
pointer_default(unique)
]
interface IProviderProperties : IUnknown
{
HRESULT GetCount(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[out] DWORD * pdwCount );
HRESULT GetAt(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] DWORD dwIndex,
[out] PROPERTYKEY * pKey );
HRESULT GetValue(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] REFPROPERTYKEY Key,
[out] PROPVARIANT * ppropVar );
HRESULT SetValue(
[in] IFunctionInstance * pIFunctionInstance,
[in] INT_PTR iProviderInstanceContext,
[in] REFPROPERTYKEY Key,
[in] const PROPVARIANT * ppropVar );
}
// Providers that want to impement Function Instance Add and Remove (IFunctionDiscovery::AddInstance/RemoveInstance)
// may do so by implementing this interface.
[
object,
uuid(CD1B9A04-206C-4a05-A0C8-1635A21A2B7C),
helpstring("IProviderPublishing Interface"),
pointer_default(unique)
]
interface IProviderPublishing : IUnknown
{
HRESULT CreateInstance(
[in] SystemVisibilityFlags enumVisibilityFlags,
[in, string, unique] const WCHAR * pszSubCategory,
[in, string] const WCHAR * pszProviderInstanceIdentity,
[out] IFunctionInstance ** ppIFunctionInstance );
HRESULT RemoveInstance(
[in] SystemVisibilityFlags enumVisibilityFlags,
[in, string, unique] const WCHAR * pszSubCategory,
[in, string] const WCHAR * pszProviderInstanceIdentity );
}
/////////////////////////////////////////////////////////////////////////////
//
// The following interfaces are used by discovery providers only.
// The will be passed to the provider by Function Discovery or
// accessible from FD interfaces passed to the provider.
//
/////////////////////////////////////////////////////////////////////////////
[
object,
uuid(86443ff0-1ad5-4e68-a45a-40c2c329de3b),
helpstring("IFunctionDiscoveryProviderFactory Interface"),
pointer_default(unique)
]
interface IFunctionDiscoveryProviderFactory : IUnknown
{
// Property Store is CoCreateable so this is redundant if inproc but for providers that are out of proc
// this should be used to ensure the Property Store lives in the client process
HRESULT CreatePropertyStore(
[out] IPropertyStore ** ppIPropertyStore );
HRESULT CreateInstance(
[in, string, unique] const WCHAR * pszSubCategory,
[in, string] const WCHAR * pszProviderInstanceIdentity,
[in] INT_PTR iProviderInstanceContext,
[in] IPropertyStore * pIPropertyStore, // Can be NULL
// Pointer to yourself (the provider), because the Factory can not own the refcount to the provider it would create a cicular refcounting issue.
[in] IFunctionDiscoveryProvider * pIFunctionDiscoveryProvider,
[out] IFunctionInstance ** ppIFunctionInstance );
// Function Instance Collection is CoCreateable so this is redundant if inproc but for providers that are out of proc
// this should be used to ensure the Property Store lives in the client process
HRESULT CreateFunctionInstanceCollection(
[out] IFunctionInstanceCollection ** ppIFunctionInstanceCollection );
};
[
object,
uuid(6876ea98-baec-46db-bc20-75a76e267a3a),
helpstring("IFunctionDiscoveryProviderQuery Interface"),
pointer_default(unique)
]
interface IFunctionDiscoveryProviderQuery : IUnknown
{
HRESULT IsInstanceQuery(
[out] BOOL *pisInstanceQuery,
[out, string] WCHAR ** ppszConstraintValue );
HRESULT IsSubcategoryQuery(
[out] BOOL *pisSubcategoryQuery,
[out, string] WCHAR ** ppszConstraintValue );
HRESULT GetQueryConstraints(
[out] IProviderQueryConstraintCollection ** ppIProviderQueryConstraints );
HRESULT GetPropertyConstraints(
[out] IProviderPropertyConstraintCollection ** ppIProviderPropertyConstraints );
};
[
object,
uuid(9c243e11-3261-4bcd-b922-84a873d460ae),
helpstring("IProviderQueryConstraintCollection Interface"),
pointer_default(unique)
]
interface IProviderQueryConstraintCollection : IUnknown
{
HRESULT GetCount(
[out] DWORD * pdwCount );
HRESULT Get(
[in, string] const WCHAR * pszConstraintName,
[out, string] WCHAR ** ppszConstraintValue );
HRESULT Item(
[in] DWORD dwIndex,
[out, string] WCHAR ** ppszConstraintName,
[out, string] WCHAR ** ppszConstraintValue );
HRESULT Next(
[out, string] WCHAR ** ppszConstraintName,
[out, string] WCHAR ** ppszConstraintValue );
HRESULT Skip( );
HRESULT Reset( );
};
[
object,
uuid(f4fae42f-5778-4a13-8540-b5fd8c1398dd),
helpstring("IProviderPropertyConstraintCollection Interface"),
pointer_default(unique)
]
interface IProviderPropertyConstraintCollection : IUnknown
{
HRESULT GetCount(
[out] DWORD * pdwCount );
HRESULT Get(
[in] REFPROPERTYKEY Key,
[out] PROPVARIANT * pPropVar,
[out] DWORD * pdwPropertyConstraint );
HRESULT Item(
[in] DWORD dwIndex,
[out] PROPERTYKEY *pKey,
[out] PROPVARIANT * pPropVar,
[out] DWORD * pdwPropertyConstraint );
HRESULT Next (
[out] PROPERTYKEY *pKey,
[out] PROPVARIANT * pPropVar,
[out] DWORD * pdwPropertyConstraint );
HRESULT Skip( );
HRESULT Reset( );
};
/////////////////////////////////////////////////////////////////////////////
//
// The following interface is implemented by Service Provider objects.
// Note: Providers can also be Service Providers.
//
/////////////////////////////////////////////////////////////////////////////
[
object,
uuid(4c81ed02-1b04-43f2-a451-69966cbcd1c2),
helpstring("IFunctionDiscoveryServiceProvider Interface"),
pointer_default(unique),
]
interface IFunctionDiscoveryServiceProvider : IUnknown
{
HRESULT Initialize(
[in] IFunctionInstance * pIFunctionInstance,
[in] REFIID riid,
[out, iid_is(riid), retval] void ** ppv );
}