//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1993.
//
//  File:	irot.idl
//
//  Contents:	Definition of private RPC interface between compobj.dll
//		and the SCM that implements the ROT.
//
//  History:	20-Jan-95 Ricksa    Created
//
//--------------------------------------------------------------------------
[ uuid(B9E79E60-3D52-11CE-AAA1-00006901293F),
  version(0.2),
  pointer_default(unique) ]

interface IROT
{
    import "iface.idl";

#pragma midl_echo(" ")
#pragma midl_echo("//------------------------")
#pragma midl_echo("// Invalid Key for SCM Reg")
#pragma midl_echo("//------------------------")
#pragma midl_echo("#define SCMREG_INVALID_ENTRY_LOC                ((ULONG64)-1)")
#pragma midl_echo(" ")

    typedef [context_handle] void *PHPROCESS;

    typedef struct _SCMREGKEY
    {
        ULONG64	  dwEntryLoc;
        DWORD     dwPadding;	// Added to optimize memory accesses in Win64
        DWORD     dwScmId;
    } SCMREGKEY;

    typedef struct _MnkEqBuf
    {
        DWORD   cdwSize;
        [size_is(cdwSize)]
        BYTE abEqData[];
    } MNKEQBUF;

    typedef struct _MkInterfaceList
    {
        DWORD           dwSize;
        [size_is(dwSize)]
        InterfaceData  *apIFDList[];
    } MkInterfaceList;

    HRESULT IrotRegister(
	[in]  handle_t hRpc,
        [in]  PHPROCESS phProcess,
        [in,unique,string] WCHAR *pwszWinstaDesktop,
        [in]  MNKEQBUF *pmkeqbuf,
        [in]  InterfaceData *pifdObject,
        [in]  InterfaceData *pifdObjectName,
        [in]  FILETIME *pfiletime,
        [in]  DWORD dwProcessId,
        [in,unique,string] WCHAR *pwszServerExe,
        [out] SCMREGKEY *psrkRegister,
	[out] error_status_t *prpcstat);

    HRESULT  IrotRevoke(
	[in]  handle_t hRpc,
        [in]  SCMREGKEY *psrkRegister,
        [in]  BOOL fServerRevoke,
        [out] InterfaceData **pifdObject,
        [out] InterfaceData **pifdName,
	[out] error_status_t *prpcstat);

    HRESULT  IrotIsRunning(
	[in]  handle_t hRpc,
        [in]  PHPROCESS phProcess,
        [in,unique,string] WCHAR *pwszWinstaDesktop,
        [in]  MNKEQBUF *pmkeqbuf,
	[out] error_status_t *prpcstat);

    HRESULT  IrotGetObject(
	[in]  handle_t hRpc,
        [in]  PHPROCESS phProcess,
        [in,unique,string] WCHAR *pwszWinstaDesktop,
        [in]  DWORD dwProcessId,
        [in]  MNKEQBUF *pmkeqbuf,
        [out] SCMREGKEY *psrkRegister,
        [out] InterfaceData **pifdObject,
	[out] error_status_t *prpcstat);

    HRESULT  IrotNoteChangeTime(
	[in]  handle_t hRpc,
        [in]  SCMREGKEY *psrkRegister,
        [in]  FILETIME *pfiletime,
	[out] error_status_t *prpcstat);

    HRESULT  IrotGetTimeOfLastChange(
	[in]  handle_t hRpc,
        [in]  PHPROCESS phProcess,
        [in,unique,string] WCHAR *pwszWinstaDesktop,
        [in]  MNKEQBUF *pmkeqbuf,
        [out] FILETIME *pfiletime,
	[out] error_status_t *prpcstat);

    HRESULT IrotEnumRunning(
	[in]  handle_t hRpc,
        [in]  PHPROCESS phProcess,
        [in,unique,string] WCHAR *pwszWinstaDesktop,
        [out] MkInterfaceList **ppMkIFList,
	[out] error_status_t *prpcstat);
}
