/*
 * Copyright 2007 Robert Shearman for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "wtypes.idl";

cpp_quote("#define IROT_PROTSEQ {'n','c','a','l','r','p','c',0}")
cpp_quote("#define IROT_ENDPOINT {'i','r','o','t',0}")

typedef struct tagMonikerComparisonData {
	ULONG ulCntData;
	[size_is(ulCntData)] BYTE abData[];
} MonikerComparisonData;

[
    uuid(7a98c254-6808-11cf-b73b-00aa00b677a8),
    version(0.2),
#ifndef _MSC_VER
    strict_context_handle
#endif
]
interface Irot
{
	typedef struct tagInterfaceData
	{
		ULONG ulCntData;
		[size_is(ulCntData)] BYTE abData[];
	} InterfaceData;

	typedef [unique] InterfaceData *PInterfaceData;

	typedef struct tagInterfaceList
	{
		ULONG size;
		[size_is(size)] PInterfaceData interfaces[];
	} InterfaceList;

	typedef [unique] InterfaceList *PInterfaceList;

	typedef DWORD IrotCookie;

	typedef handle_t IrotHandle;
	typedef [context_handle] void *IrotContextHandle;

	HRESULT IrotRegister(
		[in]  IrotHandle h,
		[in]  const MonikerComparisonData *moniker_data,
		[in]  const InterfaceData *object,
		[in]  const InterfaceData *moniker,
		[in]  const FILETIME *time,
		[in]  DWORD grfFlags,
		[out] IrotCookie *cookie,
		[out] IrotContextHandle *ctxt_handle);

	HRESULT IrotRevoke(
		[in]  IrotHandle h,
		[in]  IrotCookie cookie,
		[in, out] IrotContextHandle *ctxt_handle,
		[out] PInterfaceData *object,
		[out] PInterfaceData *moniker);

	HRESULT IrotIsRunning(
		[in]  IrotHandle h,
		[in]  const MonikerComparisonData *moniker_data);

	HRESULT IrotGetObject(
		[in]  IrotHandle h,
		[in]  const MonikerComparisonData *moniker_data,
		[out] PInterfaceData *obj,
		[out] IrotCookie *cookie);

	HRESULT IrotNoteChangeTime(
		[in]  IrotHandle h,
		[in]  IrotCookie cookie,
		[in]  const FILETIME *time);

	HRESULT IrotGetTimeOfLastChange(
		[in]  IrotHandle h,
		[in]  const MonikerComparisonData *moniker_data,
		[out] FILETIME *time);

	HRESULT IrotEnumRunning(
		[in]  IrotHandle h,
		[out] PInterfaceList *list);
}
