#define OLEDS_LIBIID_ADs                          97d25db0-0363-11cf-abc4-02608c9e7553

#define OLEDS_IID_IADs                            fd8256d0-fd15-11ce-abc4-02608c9e7553
#define OLEDS_IID_IADsContainer                   001677d0-fd16-11ce-abc4-02608c9e7553

#define OLEDS_IID_IADsClass                       c8f93dd0-4ae0-11cf-9e73-00aa004a5691
#define OLEDS_IID_IADsProperty                    c8f93dd3-4ae0-11cf-9e73-00aa004a5691
#define OLEDS_IID_IADsSyntax                      c8f93dd2-4ae0-11cf-9e73-00aa004a5691

#define OLEDS_IID_IADsCollection                  72b945e0-253b-11cf-a988-00aa006bc149
#define OLEDS_IID_IADsMembers                     451a0030-72ec-11cf-b03b-00aa006e0975

#define OLEDS_IID_IADsNamespaces                  28b96ba0-b330-11cf-a9ad-00aa006bc149

#define OLEDS_IID_IADsDomain                      00e4c220-fd16-11ce-abc4-02608c9e7553

#define OLEDS_IID_IADsLocality                    a05e03a2-effe-11cf-8abc-00c04fd8d503
#define OLEDS_IID_IADsO                           a1cd2dc6-effe-11cf-8abc-00c04fd8d503
#define OLEDS_IID_IADsOU                          a2f733b8-effe-11cf-8abc-00c04fd8d503

#define OLEDS_IID_IADsComputer                    efe3cc70-1d9f-11cf-b1f3-02608c9e7553
#define OLEDS_IID_IADsComputerOperations          ef497680-1d9f-11cf-b1f3-02608c9e7553

#define OLEDS_IID_IADsGroup                       27636b00-410f-11cf-b1ff-02608c9e7553
#define OLEDS_IID_IADsGroupOperations             257760a0-410f-11cf-b1ff-02608c9e7553

#define OLEDS_IID_IADsUser                        3e37e320-17e2-11cf-abc4-02608c9e7553

#define OLEDS_IID_IADsPrintQueue                  b15160d0-1226-11cf-a985-00aa006bc149
#define OLEDS_IID_IADsPrintQueueOperations        124be5c0-156e-11cf-a986-00aa006bc149

#define OLEDS_IID_IADsPrintJob                    32fb6780-1ed0-11cf-a988-00aa006bc149
#define OLEDS_IID_IADsPrintJobOperations          9a52db30-1ecf-11cf-a988-00aa006bc149

#define OLEDS_IID_IADsService                     68af66e0-31ca-11cf-a98a-00aa006bc149
#define OLEDS_IID_IADsServiceOperations           5d7b33f0-31ca-11cf-a98a-00aa006bc149

#define OLEDS_IID_IADsFileService                 a89d1900-31ca-11cf-a98a-00aa006bc149
#define OLEDS_IID_IADsFileServiceOperations       a02ded10-31ca-11cf-a98a-00aa006bc149

#define OLEDS_IID_IADsFileShare                   eb6dcaf0-4b83-11cf-a995-00aa006bc149
#define OLEDS_IID_IADsSession                     398b7da0-4aab-11cf-ae2c-00aa006ebfb9
#define OLEDS_IID_IADsResource                    34a05b20-4aab-11cf-ae2c-00aa006ebfb9

#define OLEDS_IID_IADsOpenDSObject                 ddf2891e-0f9c-11d0-8ad4-00c04fd8d503

#define OLEDS_IID_IADsSearch                       C69F7780-4008-11D0-B94C-00C04FD8D5A8

#define OLEDS_IID_IDirectoryObject                         e798de2c-22e4-11d0-84fe-00c04fd8d503

#define OLEDS_IID_IDirectorySearch                       109ba8ec-92f0-11d0-a790-00c04fd8d5a8

#define OLEDS_IID_IDirectoryAttrMgmt                   75db3b9c-a4d8-11d0-a79c-00c04fd8d5a8

#define OLEDS_IID_IADsPropertyList                c6f602b6-8f69-11d0-8528-00c04fd8d503

#define OLEDS_IID_IADsAggregatee                   1346ce8c-9039-11d0-8528-00c04fd8d503

#define OLEDS_IID_IADsAggregator                  52db5fb0-941f-11d0-8529-00c04fd8d503

#define OLEDS_IID_IADsPropertyEntry               05792c8e-941f-11d0-8529-00c04fd8d503
#define OLEDS_CLSID_PropertyEntry                 72d3edc2-a4c4-11d0-8533-00c04fd8d503

#define OLEDS_IID_IADsAttrInfo                    af1206f6-aef7-11d0-8537-00c04fd8d503

#define OLEDS_IID_IADsPropertyValue               79fa9ad0-a97c-11d0-8534-00c04fd8d503
#define OLEDS_CLSID_PropertyValue                 7b9e38b0-a97c-11d0-8534-00c04fd8d503

#define OLEDS_IID_IADsValue                       1e3ef0aa-aef5-11d0-8537-00c04fd8d503

#define OLEDS_IID_IADsAccessControlEntry          b4f3a14c-9bdd-11d0-852c-00c04fd8d503
#define OLEDS_CLSID_AccessControlEntry            b75ac000-9bdd-11d0-852c-00c04fd8d503
#define OLEDS_IID_IADsAccessControlList           b7ee91cc-9bdd-11d0-852c-00c04fd8d503
#define OLEDS_CLSID_AccessControlList             b85ea052-9bdd-11d0-852c-00c04fd8d503
#define OLEDS_IID_IADsSecurityDescriptor          b8c787ca-9bdd-11d0-852c-00c04fd8d503
#define OLEDS_CLSID_SecurityDescriptor            b958f73c-9bdd-11d0-852c-00c04fd8d503
#define OLEDS_IID_IADsPathname                    d592aed4-f420-11d0-a36e-00c04fb950dc
#define OLEDS_CLSID_Pathname                      080d0d78-f421-11d0-a36e-00c04fb950dc

#define OLEDS_IID_IDSSearch                       3b5e8d88-fa53-11d0-8bdb-00c04fd8d503
#define OLEDS_IID_IDSObject                       3d213801-fa53-11d0-8bdb-00c04fd8d503

#define OLEDS_IID_IDSAttrMgmt                     ae164493-fa64-11d0-8bdb-00c04fd8d503

#define OLEDS_IID_IADsLargeInteger                9068270b-0939-11d1-8be1-00c04fd8d503
#define OLEDS_CLSID_LargeInteger                  927971f5-0939-11d1-8be1-00c04fd8d503

#define OLEDS_IID_IADsObjectOptions               46f14fda-232b-11d1-a808-00c04fd8d5a8

#define PROPERTY_RW(name,type, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] type * retval);    \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] type name);

#define PROPERTY_RO(name,type, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] type * retval);

#define PROPERTY_LONG_RW(name, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] long * retval);    \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] long ln##name);








#define PROPERTY_LONG_RO(name, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] long * retval);

#define PROPERTY_BSTR_RW(name, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] BSTR * retval);    \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] BSTR bstr##name);

#define PROPERTY_BSTR_RO(name, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] BSTR * retval);

#define PROPERTY_VARIANT_BOOL_RW(name, prid)          \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] VARIANT_BOOL * retval); \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] VARIANT_BOOL f##name);

#define PROPERTY_VARIANT_BOOL_RO(name, prid)          \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] VARIANT_BOOL * retval);

#define PROPERTY_VARIANT_RW(name, prid)               \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] VARIANT * retval); \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] VARIANT v##name);

#define PROPERTY_VARIANT_RO(name, prid)               \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] VARIANT * retval); \

#define PROPERTY_DATE_RW(name, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] DATE * retval);    \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] DATE da##name);

#define PROPERTY_DATE_RO(name, prid)                  \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] DATE * retval);


#define PROPERTY_DISPATCH_RW(name, prid)              \
        [propget, id(prid)]                           \
        HRESULT name([out, retval] IDispatch ** retval);    \
                                                      \
        [propput, id(prid)]                           \
        HRESULT name([in] IDispatch * p##name);





#define DISPID_IADs_UPPER_BOUND           14
#define DISPID_IADsService_UPPER_BOUND    DISPID_IADs_UPPER_BOUND + 18


