import "oaidl.idl";
import "ocidl.idl";

[
    uuid(5dbe4242-0746-11d3-b56e-00c04f79ddc2),
    object,
	dual,
    helpstring("Microsoft ICloneSecurityPrincipal")
]
interface ICloneSecurityPrincipal : IDispatch
{
	[id(0)]
	HRESULT
	Connect(
		[in] BSTR srcDomainController,
		[in] BSTR srcDomain,          
		[in] BSTR dstDomainController,
		[in] BSTR dstDomain);         

	[id(1)]
	HRESULT
	CopyDownlevelUserProperties(
		[in] BSTR srcSamName,
		[in] BSTR dstSamName,
		[in] long flags);
				
	[id(2)]
	HRESULT
	AddSidHistory(
		[in] BSTR srcPrincipalSamName,
		[in] BSTR dstPrincipalSamName,
		[in] long flags);             
	
	[id(3)]
	HRESULT 
	GetMembersSIDs(
		[in] BSTR dstGroupDN,
		[out, retval] VARIANT * pVal );

}

[
	object,
	uuid(BCDB5F36-3AFE-11D3-B6B8-0000F87A3388),
	dual,
	helpstring("IADsSID Interface"),
	pointer_default(unique)
]
interface IADsSID : IDispatch
{
	[id(4)]
	HRESULT
	GetAs(
		[in] long lFormat, 
		[out, retval] VARIANT *pVar);

	[id(5)]
	HRESULT
	SetAs(
		[in] long    lFormat, 
		[in] VARIANT varData);

	enum ADS_SID_FORMAT {
	   ADS_SID_RAW, 
	   ADS_SID_HEXSTRING,
	   ADS_SID_SAM,
	   ADS_SID_UPN,
	   ADS_SID_SDDL,
	   ADS_SID_WINNT_PATH,
	   ADS_SID_ACTIVE_DIRECTORY_PATH,
	   ADS_SID_SID_BINDING
	};
};

[
	object,
	uuid(877C4BEE-3986-11D3-B6B8-0000F87A3388),
	dual,
	helpstring("IADsError Interface"),
	pointer_default(unique)
]
interface IADsError : IDispatch
{
	[id(6)]
	HRESULT
	GetErrorMsg(
		[in] long hrErr,
		[out,retval] BSTR *pbMsg);
};

[
	uuid(5bf93a8e-0746-11d3-b56e-00c04f79ddc2),
	version(1.0),
	helpstring("Microsoft CloneSecurityPrincipal 1.0"),
	lcid(0)
]
library CloneSecurityPrincipalLib
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

	[
		uuid(aa7f1454-0745-11d3-b56e-00c04f79ddc2),
		helpstring("CloneSecurityPrincipal Class")
	]
	coclass CloneSecurityPrincipal
	{
		interface IUnknown;
		[default] interface ICloneSecurityPrincipal;
		interface IADsSID;
		interface IADsError;
	};
};