class CSecurityDescriptor;


class CSecurityDescriptor : INHERIT_TRACKING,
                            public ISupportErrorInfo,
                            public IADsSecurityDescriptor

{
public:

    /* IUnknown methods */
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ;

    DECLARE_STD_REFCOUNTING

    DECLARE_IDispatch_METHODS

    DECLARE_ISupportErrorInfo_METHODS

    DECLARE_IADsSecurityDescriptor_METHODS

    CSecurityDescriptor::CSecurityDescriptor();

    CSecurityDescriptor::~CSecurityDescriptor();

   static
   HRESULT
   CSecurityDescriptor::CreateSecurityDescriptor(
       REFIID riid,
       void **ppvObj
       );

    static
    HRESULT
    CSecurityDescriptor::AllocateSecurityDescriptorObject(
        CSecurityDescriptor ** ppSecurityDescriptor
        );

protected:

    CDispatchMgr FAR * _pDispMgr;

    LPWSTR _lpOwner;

    BOOL   _fOwnerDefaulted;

    LPWSTR _lpGroup;

    BOOL   _fGroupDefaulted;

    DWORD  _dwRevision;
    DWORD  _dwControl;

    IADsAccessControlList  * _pDAcl;

    BOOL    _fDaclDefaulted;

    IADsAccessControlList * _pSAcl;

    BOOL    _fSaclDefaulted;

};