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

#include "idlmulti.h"
//  
    
#if( OLEDBVER >= 0x0200 )    
    REMOTED_INTERFACE(0c733a62-2a1c-11ce-ade5-00aa0044773d)
#else
    LOCAL_INTERFACE(0c733a62-2a1c-11ce-ade5-00aa0044773d)
#endif

    
interface IDBSecurityInfo : IUnknown {

typedef DWORD DBTRUSTEEACCTTYPE;

enum DBTRUSTEEACCTTYPEENUM {
	DBTRUSTEEACCTTYPE_UNKNOWN,
	DBTRUSTEEACCTTYPE_USER,
	DBTRUSTEEACCTTYPE_GROUP,
};

typedef DWORD DBTRUSTEEIDTYPE;

enum DBTRUSTEEIDTYPEENUM {
	DBTRUSTEEIDTYPE_SID,
	DBTRUSTEEIDTYPE_NAME,
};

typedef DWORD DBTRUSTEEMULT;

enum DBTRUSTEEMULTENUM {
	DBTRUSTEEMULT_NONE,
	DBTRUSTEEMULT_IMPERSONATE,
};

typedef struct tagDBTRUSTEE {
	struct tagDBTRUSTEE * pMultipleTrustee;
	LPOLESTR pwszName;
	DBTRUSTEEMULT dwMultipleTrusteeOp;
	DBTRUSTEEIDTYPE dwTrusteeIDType;
	DBTRUSTEEACCTTYPE dwTrusteeAcctType;
} DBTRUSTEE, *PDBTRUSTEE;

typedef struct tagDBOBJECTTYPE {
	LPOLESTR pwszObjectTypeName;
	GUID * pguidObjectTypeId;
} DBOBJECTTYPE;

typedef struct tagDBPERMTYPE {
	LPOLESTR pwszPermissionTypeName;
	GUID * pguidPermissionTypeId;
} DBPERMTYPE;

typedef struct tagDBTRUSTEETYPE {
	LPOLESTR pwszTrusteeTypeName;
	GUID * pguidTrusteeTypeId;
} DBTRUSTEETYPE;

typedef struct tagDBACCESSTRIPLE {
//	DBPERMISSION Permission;
	DBPERMTYPE PermissionType;
	DBOBJECTTYPE ObjectType;
	DBTRUSTEETYPE TrusteeType;
} DBACCESSTRIPLE;

	HRESULT GetAccessTriples(
		[in, out] ULONG * pcAccessTriplesInfo,
		[out, size_is(,*pcAccessTriplesInfo)] DBACCESSTRIPLE ** prgAccessTripleInfo
	);

	HRESULT GetAuthenticatedTrusteeIdentity(
		[out] DBTRUSTEE * pTrustee
	);

	HRESULT GetObjectTypesInfo(
		[in, out] ULONG * pcObjectInfo,
		[out, size_is(,*pcObjectInfo)] DBOBJECTTYPE ** prgObjectInfo
	);

	HRESULT GetPermTypesInfo(
		[in, out] ULONG * pcPermInfo,
		[out, size_is(,*pcPermInfo)] DBPERMTYPE ** prgPermInfo
	);

}

