//-----------------------------------------------------------------------------
// File:			dbdsad.idl
//
// Copyright:		Copyright (c) Microsoft Corporation
//
// Contents: 		OLE DB interface definition
//
// Comments:
//
//-----------------------------------------------------------------------------

#include "idlmulti.h"
//

	REMOTED_INTERFACE(0c733a7a-2a1c-11ce-ade5-00aa0044773d)


interface IDBDataSourceAdmin : IUnknown {

	[local]
	HRESULT CreateDataSource(
		[in] ULONG cPropertySets,
		[in, out, size_is(cPropertySets), annotation("__inout_ecount_opt(cPropertySets)")] DBPROPSET rgPropertySets[],
		[in, annotation("__in_opt")] IUnknown * pUnkOuter,
		[in, annotation("__in")] REFIID riid,
		[out, iid_is(riid), annotation("__deref_opt_out")] IUnknown ** ppDBSession
	);

	[call_as(CreateDataSource)]
	HRESULT RemoteCreateDataSource(
		[in] ULONG cPropertySets,
		[in, unique, size_is(cPropertySets)] DBPROPSET * rgPropertySets,
		[in] IUnknown * pUnkOuter,
		[in] REFIID riid,
		[in, out, unique, iid_is(riid)] IUnknown ** ppDBSession,
		[in] ULONG cTotalProps,
		[out, size_is(cTotalProps)] DBPROPSTATUS * rgPropStatus,
		[out] IErrorInfo ** ppErrorInfoRem
	);

	[local]
	HRESULT DestroyDataSource(
	);

	[call_as(DestroyDataSource)]
	HRESULT RemoteDestroyDataSource(
		[out] IErrorInfo ** ppErrorInfoRem
	);

	[local]
	HRESULT GetCreationProperties(
		[in] ULONG cPropertyIDSets,
		[in, size_is(cPropertyIDSets), annotation("__in_ecount_opt(cPropertyIDSets)")] const DBPROPIDSET rgPropertyIDSets[],
		[out, annotation("__out")] ULONG * pcPropertyInfoSets,
		[out, size_is(,*pcPropertyInfoSets), annotation("__deref_out_ecount_opt(*pcPropertyInfoSets)")] DBPROPINFOSET ** prgPropertyInfoSets,
		[out, annotation("__deref_opt_out_z_opt")] OLECHAR ** ppDescBuffer
	);

#ifdef _WIN64  //Use casting by ULONG in attribute size_is under 64-bit environment.

	[call_as(GetCreationProperties)]
	HRESULT RemoteGetCreationProperties(
		[in] ULONG cPropertyIDSets,
		[in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET * rgPropertyIDSets,
		[in, out] ULONG * pcPropertyInfoSets,
		[out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET ** prgPropertyInfoSets,
		[in, out] DBCOUNTITEM * pcOffsets,
		[out, size_is(,(ULONG)*pcOffsets)] DBBYTEOFFSET ** prgDescOffsets,
		[in, out] ULONG * pcbDescBuffer,
		[in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR ** ppDescBuffer,
		[out] IErrorInfo ** ppErrorInfoRem
	);

#else  //No casting by ULONG for 32-bit.

	[call_as(GetCreationProperties)]
	HRESULT RemoteGetCreationProperties(
		[in] ULONG cPropertyIDSets,
		[in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET * rgPropertyIDSets,
		[in, out] ULONG * pcPropertyInfoSets,
		[out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET ** prgPropertyInfoSets,
		[in, out] DBCOUNTITEM * pcOffsets,
		[out, size_is(,*pcOffsets)] DBBYTEOFFSET ** prgDescOffsets,
		[in, out] ULONG * pcbDescBuffer,
		[in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR ** ppDescBuffer,
		[out] IErrorInfo ** ppErrorInfoRem
	);
	
#endif

	[local]
	HRESULT ModifyDataSource(
		[in] ULONG cPropertySets,
		[in,out, size_is(cPropertySets), annotation("__inout_ecount_opt(cPropertySets)")] DBPROPSET rgPropertySets[]
	);

	[call_as(ModifyDataSource)]
	HRESULT RemoteModifyDataSource(
		[in] ULONG cPropertySets,
		[in, size_is(cPropertySets)] DBPROPSET * rgPropertySets,
		[out] IErrorInfo ** ppErrorInfoRem
	);

}

