import "objidl.idl";
import "oleidl.idl";
import "oaidl.idl";
import "wbemcli.idl";

// flags passed to IWbemDecoupledEventSink::Connect
typedef [v1_enum] enum tag_WBEM_PSEUDO_PROVIDER_CONNECT_FLAGS
{
    WBEM_FLAG_NOTIFY_START_STOP = 1,
    WBEM_FLAG_NOTIFY_QUERY_CHANGE = 2,
	WBEM_FLAG_CHECK_SECURITY = 4

} WBEM_PSEUDO_PROVIDER_CONNECT_FLAGS;

// flags passed to IWbemEventProvider::ProvideEvents
typedef [v1_enum] enum tag_WBEM_PROVIDE_EVENTS_FLAGS
{
    WBEM_FLAG_START_PROVIDING = 0,
    WBEM_FLAG_STOP_PROVIDING = 1
} WBEM_PROVIDE_EVENTS_FLAGS;

[object, local, uuid(CD94EBF2-E622-11d2-9CB3-00105A1F4801)]
interface IWbemDecoupledEventSink : IUnknown
{
	// "real provider ready to play"
	HRESULT Connect(
		[in, string] LPCWSTR wszNamespace,
		[in, string] LPCWSTR wszProviderName,
		[in]  long lFlags,
		[out] IWbemObjectSink** ppSink,
		[out] IWbemServices**   ppNamespace);

	// real provider wants notifications
	HRESULT SetProviderServices([in] IUnknown* pProviderServices, [in] long lFlags);

	// real provider doesn't want to play any more
	HRESULT Disconnect();
};

[uuid(E002EEEF-E6EA-11d2-9CB3-00105A1F4801)]
library PassiveSink
{
	[uuid(E002E4F0-E6EA-11d2-9CB3-00105A1F4801)]
	coclass PseudoSink
	{
		interface IWbemDecoupledEventSink;
	};
};


