//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1996.
//
//  File:   odeath.idl
//
//+-------------------------------------------------------------------------

//+-------------------------------------------------------------------------
//
//  Interface:	IRemUnknown2
//
//  Synopsys:	This is a local interface used to convert strong references
//		to weak references and vice versa. It is needed for the
//		container/link/embedding aspects of OLE.
//
//  Notes:	Weak references are not permitted remotely.
//
//+-------------------------------------------------------------------------
[
    object,
    uuid(0000013C-0000-0000-C000-000000000046)
]

interface IRemUnknown2 : IRemUnknown
{
#ifndef DO_NO_IMPORTS
    import "remunk.idl";
#endif
    const unsigned long IRUF_CONVERTTOWEAK	    = 0x01;// make refs weak
    const unsigned long IRUF_CONVERTTOSTRONG	    = 0x02;// make refs strong
    const unsigned long IRUF_DISCONNECTIFLASTSTRONG = 0x04;// disconnect the
						// object if last strong ref
    HRESULT RemChangeRef
    (
	[in] unsigned long  flags,
	[in] unsigned short cInterfaceRefs,
	[in, size_is(cInterfaceRefs)] REMINTERFACEREF InterfaceRefs[]
    );
}


//+-------------------------------------------------------------------------
//
//  Interface:	IRundown
//
//  Synopsys:	This is the local OID rundown interface. The object exporter
//		calls it to notify the server which OIDs are no longer being
//		pinged.
//
//  Notes:	This inherits from IRemUnknown and IRemUnknown2 so that we
//		can use the same IPID for all three interfaces. This is
//		strictly a local decision and does not affect remote protocol.
//
//+-------------------------------------------------------------------------
[
    uuid(00000134-0000-0000-C000-000000000046)
#ifndef RAW
  , object
#endif
 ]

interface IRundown
#ifndef RAW
	  : IRemUnknown2
#endif

{
#ifndef DO_NO_IMPORTS
    import "iface.idl";
    import "obase.idl";
    import "remunk.idl";
#endif
    #include "comhndl.h"

    COM_DEFINES(IOSCM)

#ifdef RAW
    // Define the functions in IRemUnknown2
    HRESULT DummyRemQuery( handle_t handle );
    HRESULT DummyRemAddRef( handle_t handle );
    HRESULT DummyRemRelease( handle_t handle );
    HRESULT DummyRemChangeRef( handle_t handle );

    error_status_t
    RawRundownOid
#else
    HRESULT
    RundownOid
#endif
    (
    COM_HANDLE
	[in] ULONG     cOid,
	[in, size_is(cOid)] OID     aOid[],
    [out, size_is(cOid)] unsigned char afOkToRundown[]
    );
}

