mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
612 lines
43 KiB
612 lines
43 KiB
#define DEFINE_CONTAINED_IADs_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::get_Name(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(_pADs->get_Name(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_ADsPath(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
\
|
|
RRETURN(_pADs->get_ADsPath(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Class(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
\
|
|
RRETURN(_pADs->get_Class(retval)); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Parent(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(_pADs->get_Parent(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Schema(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(_pADs->get_Schema(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_GUID(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(_pADs->get_GUID(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetInfo(THIS_) \
|
|
{ \
|
|
RRETURN(_pADs->GetInfo()); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::SetInfo(THIS_ ) \
|
|
{ \
|
|
RRETURN(_pADs->SetInfo()); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::GetInfoEx(THIS_ VARIANT vProperties, long lnReserved) \
|
|
{ \
|
|
RRETURN(_pADs->GetInfoEx(vProperties, lnReserved)); \
|
|
}
|
|
|
|
|
|
#define DEFINE_CONTAINED_IADsPutGet_Implementation(cls, ClassPropMapping) \
|
|
STDMETHODIMP \
|
|
cls::Get(THIS_ BSTR bstrName, VARIANT FAR* pvProp) \
|
|
{ \
|
|
LPTSTR pszPropName = bstrName; \
|
|
\
|
|
for ( DWORD i = 0; i < ARRAY_SIZE(ClassPropMapping); i++ ) \
|
|
{ \
|
|
if ( _tcsicmp(bstrName, ClassPropMapping[i].pszADsProp ) == 0 ) \
|
|
{ \
|
|
pszPropName = ClassPropMapping[i].pszNDSProp; \
|
|
break; \
|
|
} \
|
|
} \
|
|
\
|
|
RRETURN(_pADs->Get( pszPropName, pvProp)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Put(THIS_ BSTR bstrName, VARIANT vProp) \
|
|
{ \
|
|
LPTSTR pszPropName = bstrName; \
|
|
\
|
|
for ( DWORD i = 0; i < ARRAY_SIZE(ClassPropMapping); i++ ) \
|
|
{ \
|
|
if ( _tcsicmp(bstrName, ClassPropMapping[i].pszADsProp) == 0 ) \
|
|
{ \
|
|
pszPropName = ClassPropMapping[i].pszNDSProp; \
|
|
break; \
|
|
} \
|
|
} \
|
|
\
|
|
RRETURN(_pADs->Put( pszPropName, vProp)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetEx(THIS_ BSTR bstrName, VARIANT FAR* pvProp) \
|
|
{ \
|
|
LPTSTR pszPropName = bstrName; \
|
|
\
|
|
for ( DWORD i = 0; i < ARRAY_SIZE(ClassPropMapping); i++ ) \
|
|
{ \
|
|
if ( _tcsicmp(bstrName, ClassPropMapping[i].pszADsProp ) == 0 ) \
|
|
{ \
|
|
pszPropName = ClassPropMapping[i].pszNDSProp; \
|
|
break; \
|
|
} \
|
|
} \
|
|
\
|
|
RRETURN(_pADs->GetEx( pszPropName, pvProp)); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::PutEx(THIS_ long lnControlCode, BSTR bstrName, VARIANT vProp) \
|
|
{ \
|
|
LPTSTR pszPropName = bstrName; \
|
|
\
|
|
for ( DWORD i = 0; i < ARRAY_SIZE(ClassPropMapping); i++ ) \
|
|
{ \
|
|
if ( _tcsicmp(bstrName, ClassPropMapping[i].pszADsProp) == 0 ) \
|
|
{ \
|
|
pszPropName = ClassPropMapping[i].pszNDSProp; \
|
|
break; \
|
|
} \
|
|
} \
|
|
\
|
|
RRETURN(_pADs->PutEx( lnControlCode, pszPropName, vProp)); \
|
|
}
|
|
|
|
#define DEFINE_CONTAINED_IDirectoryObject_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::SetObjectAttributes( \
|
|
PADS_ATTR_INFO pAttributeEntries, \
|
|
DWORD dwNumAttributes, \
|
|
DWORD *pdwNumAttributesModified \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSObject->SetObjectAttributes( \
|
|
pAttributeEntries, \
|
|
dwNumAttributes, \
|
|
pdwNumAttributesModified \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetObjectAttributes( \
|
|
LPWSTR * pAttributeNames, \
|
|
DWORD dwNumberAttributes, \
|
|
PADS_ATTR_INFO *ppAttributeEntries, \
|
|
DWORD * pdwNumAttributesReturned \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSObject->GetObjectAttributes( \
|
|
pAttributeNames, \
|
|
dwNumberAttributes, \
|
|
ppAttributeEntries, \
|
|
pdwNumAttributesReturned \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::CreateDSObject( \
|
|
LPWSTR pszRDNName, \
|
|
PADS_ATTR_INFO pAttributeEntries, \
|
|
DWORD dwNumAttributes, \
|
|
IDispatch * FAR* ppObject \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSObject->CreateDSObject( \
|
|
pszRDNName, \
|
|
pAttributeEntries, \
|
|
dwNumAttributes, \
|
|
ppObject \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::DeleteDSObject( \
|
|
LPWSTR pszRDNName \
|
|
) \
|
|
\
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSObject->DeleteDSObject( \
|
|
pszRDNName \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetObjectInformation( \
|
|
THIS_ PADS_OBJECT_INFO * ppObjInfo \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSObject->GetObjectInformation( \
|
|
ppObjInfo \
|
|
); \
|
|
RRETURN(hr); \
|
|
}
|
|
|
|
|
|
#define DEFINE_CONTAINED_IDirectorySearch_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::SetSearchPreference( \
|
|
PADS_SEARCHPREF_INFO pSearchPrefs, \
|
|
DWORD dwNumPrefs \
|
|
\
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->SetSearchPreference( \
|
|
pSearchPrefs, \
|
|
dwNumPrefs \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::ExecuteSearch( \
|
|
LPWSTR pszSearchFilter, \
|
|
LPWSTR * pAttributeNames, \
|
|
DWORD dwNumberAttributes, \
|
|
PADS_SEARCH_HANDLE phSearchResult \
|
|
\
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->ExecuteSearch( \
|
|
pszSearchFilter, \
|
|
pAttributeNames, \
|
|
dwNumberAttributes, \
|
|
phSearchResult \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::AbandonSearch( \
|
|
ADS_SEARCH_HANDLE hSearchResult \
|
|
\
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->AbandonSearch( \
|
|
hSearchResult \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetFirstRow( \
|
|
ADS_SEARCH_HANDLE hSearchResult \
|
|
\
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->GetFirstRow( \
|
|
hSearchResult \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetNextRow( \
|
|
ADS_SEARCH_HANDLE hSearchResult \
|
|
\
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->GetNextRow( \
|
|
hSearchResult \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetPreviousRow( \
|
|
ADS_SEARCH_HANDLE hSearchResult \
|
|
\
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->GetPreviousRow( \
|
|
hSearchResult \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetNextColumnName( \
|
|
ADS_SEARCH_HANDLE hSearchResult, \
|
|
LPWSTR * ppszColumnName \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->GetNextColumnName( \
|
|
hSearchResult, \
|
|
ppszColumnName \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetColumn( \
|
|
ADS_SEARCH_HANDLE hSearchResult, \
|
|
LPWSTR szColumnName, \
|
|
PADS_SEARCH_COLUMN pSearchColumn \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->GetColumn( \
|
|
hSearchResult, \
|
|
szColumnName, \
|
|
pSearchColumn \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::FreeColumn( \
|
|
PADS_SEARCH_COLUMN pSearchColumn \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->FreeColumn( \
|
|
pSearchColumn \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::CloseSearchHandle( \
|
|
ADS_SEARCH_HANDLE hSearchResult \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSSearch->CloseSearchHandle( \
|
|
hSearchResult \
|
|
); \
|
|
RRETURN(hr); \
|
|
}
|
|
|
|
#define DEFINE_CONTAINED_IADsPropertyList_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::get_PropertyCount(THIS_ long FAR * plCount) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->get_PropertyCount( \
|
|
plCount \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Next(THIS_ VARIANT FAR *pVariant) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->Next( \
|
|
pVariant \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Skip(THIS_ long cElements) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->Skip( \
|
|
cElements \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Reset() \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->Reset( \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::ResetPropertyItem(THIS_ VARIANT varEntry) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->ResetPropertyItem( \
|
|
varEntry \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::GetPropertyItem(THIS_ BSTR bstrName, LONG lnADsType, VARIANT * pVariant) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->GetPropertyItem( \
|
|
bstrName, \
|
|
lnADsType, \
|
|
pVariant \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::PutPropertyItem(THIS_ VARIANT varData) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->PutPropertyItem( \
|
|
varData \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::PurgePropertyList(THIS_) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->PurgePropertyList(); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::Item(THIS_ VARIANT varIndex, VARIANT * pVariant) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pADsPropList->Item( \
|
|
varIndex, \
|
|
pVariant \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
}
|
|
|
|
#define DEFINE_CONTAINED_IDirectorySchemaMgmt_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::EnumAttributes( \
|
|
LPWSTR * ppszAttrNames, \
|
|
DWORD dwNumAttributes, \
|
|
PADS_ATTR_DEF * ppAttrDefinition, \
|
|
DWORD * pdwNumAttributes \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->EnumAttributes( \
|
|
ppszAttrNames, \
|
|
dwNumAttributes, \
|
|
ppAttrDefinition, \
|
|
pdwNumAttributes \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::CreateAttributeDefinition( \
|
|
LPWSTR pszAttributeName, \
|
|
PADS_ATTR_DEF pAttributeDefinition \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->CreateAttributeDefinition( \
|
|
pszAttributeName, \
|
|
pAttributeDefinition \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::WriteAttributeDefinition( \
|
|
LPWSTR pszAttributeName, \
|
|
PADS_ATTR_DEF pAttributeDefinition \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->WriteAttributeDefinition( \
|
|
pszAttributeName, \
|
|
pAttributeDefinition \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::DeleteAttributeDefinition( \
|
|
LPWSTR pszAttributeName \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->DeleteAttributeDefinition( \
|
|
pszAttributeName \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::EnumClasses( \
|
|
LPWSTR * ppszClassNames, \
|
|
DWORD dwNumClasses, \
|
|
PADS_CLASS_DEF * ppClassDefinition, \
|
|
DWORD * pdwNumClasses \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->EnumClasses( \
|
|
ppszClassNames, \
|
|
dwNumClasses, \
|
|
ppClassDefinition, \
|
|
pdwNumClasses \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::CreateClassDefinition( \
|
|
LPWSTR pszClassName, \
|
|
PADS_CLASS_DEF pClassDefinition \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->CreateClassDefinition( \
|
|
pszClassName, \
|
|
pClassDefinition \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::WriteClassDefinition( \
|
|
LPWSTR pszClassName, \
|
|
PADS_CLASS_DEF pClassDefinition \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->WriteClassDefinition( \
|
|
pszClassName, \
|
|
pClassDefinition \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::DeleteClassDefinition( \
|
|
LPWSTR pszClassName \
|
|
) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = _pDSAttrMgmt->DeleteClassDefinition( \
|
|
pszClassName \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
}
|
|
|