512 lines
30 KiB
C
512 lines
30 KiB
C
//
|
|
// This is a macro which is ONLY used in CNWCOMPATUser::SetAccountRestrictions.
|
|
//
|
|
|
|
#define GET_LOGIN_CONTROL() \
|
|
if (fUmOK == FALSE) { \
|
|
\
|
|
hr = NWApiGetLOGIN_CONTROL( \
|
|
hConn, \
|
|
_Name, \
|
|
&LoginCtrl \
|
|
); \
|
|
BAIL_ON_FAILURE(hr); \
|
|
\
|
|
fUmOK = TRUE; \
|
|
}
|
|
|
|
//
|
|
// NCP Reply buffer macro.
|
|
//
|
|
|
|
#define INIT_RPLY_SGMT(RS) \
|
|
RS## = new RPLY_SGMT_LST; \
|
|
if (!##RS##) { \
|
|
RRETURN(E_OUTOFMEMORY); \
|
|
} \
|
|
RS##->lpNext = NULL;
|
|
|
|
#define DELETE_LIST(ptr) \
|
|
if (##ptr##) { \
|
|
do { \
|
|
lpTemp = (##ptr##)->lpNext; \
|
|
delete (##ptr##); \
|
|
(##ptr##) = lpTemp; \
|
|
} while (##ptr##); \
|
|
}
|
|
|
|
//
|
|
// Misc Macro.
|
|
//
|
|
|
|
#define ADSFREESTRING(str) \
|
|
if (##str##) { \
|
|
ADsFreeString(##str##); \
|
|
}
|
|
|
|
//
|
|
// Error flow control macro.
|
|
//
|
|
|
|
#define RRETURN_ENUM_STATUS(hr) \
|
|
if (hr != S_OK) { \
|
|
RRETURN(S_FALSE); \
|
|
} \
|
|
RRETURN(S_OK);
|
|
|
|
#define BAIL_IF_ERROR(hr) \
|
|
if (FAILED(hr)) { \
|
|
goto cleanup; \
|
|
} \
|
|
|
|
#define BAIL_ON_FAILURE(hr) \
|
|
if (FAILED(hr)) { \
|
|
goto error; \
|
|
} \
|
|
|
|
//
|
|
// DEFINE_IDispatch_Implementation_Unimplemented
|
|
//
|
|
|
|
#define DEFINE_IDispatch_Implementation_Unimplemented(cls) \
|
|
STDMETHODIMP \
|
|
cls::GetTypeInfoCount(unsigned int FAR* pctinfo) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetTypeInfo( \
|
|
unsigned int itinfo, \
|
|
LCID lcid, \
|
|
ITypeInfo FAR* FAR* pptinfo \
|
|
) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetIDsOfNames( \
|
|
REFIID iid, \
|
|
LPWSTR FAR* rgszNames, \
|
|
unsigned int cNames, \
|
|
LCID lcid, \
|
|
DISPID FAR* rgdispid \
|
|
) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Invoke( \
|
|
DISPID dispidMember, \
|
|
REFIID iid, LCID lcid, \
|
|
unsigned short wFlags, \
|
|
DISPPARAMS FAR* pdispparams, \
|
|
VARIANT FAR* pvarResult, \
|
|
EXCEPINFO FAR* pexcepinfo, \
|
|
unsigned int FAR* puArgErr \
|
|
) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
}
|
|
|
|
//
|
|
// DEFINE_IDispatch_Implementation
|
|
//
|
|
|
|
#define DEFINE_IDispatch_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::GetTypeInfoCount(unsigned int FAR* pctinfo) \
|
|
{ \
|
|
RRETURN(_pDispMgr->GetTypeInfoCount(pctinfo)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetTypeInfo( \
|
|
unsigned int itinfo, \
|
|
LCID lcid, \
|
|
ITypeInfo FAR* FAR* pptinfo) \
|
|
{ \
|
|
RRETURN(_pDispMgr->GetTypeInfo( \
|
|
itinfo, \
|
|
lcid, \
|
|
pptinfo \
|
|
)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetIDsOfNames( \
|
|
REFIID iid, \
|
|
LPWSTR FAR* rgszNames, \
|
|
unsigned int cNames, \
|
|
LCID lcid, \
|
|
DISPID FAR* rgdispid \
|
|
) \
|
|
{ \
|
|
RRETURN(_pDispMgr->GetIDsOfNames( \
|
|
iid, \
|
|
rgszNames, \
|
|
cNames, \
|
|
lcid, \
|
|
rgdispid \
|
|
)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Invoke( \
|
|
DISPID dispidMember, \
|
|
REFIID iid, \
|
|
LCID lcid, \
|
|
unsigned short wFlags, \
|
|
DISPPARAMS FAR* pdispparams, \
|
|
VARIANT FAR* pvarResult, \
|
|
EXCEPINFO FAR* pexcepinfo, \
|
|
unsigned int FAR* puArgErr \
|
|
) \
|
|
{ \
|
|
RRETURN (_pDispMgr->Invoke( \
|
|
dispidMember, \
|
|
iid, \
|
|
lcid, \
|
|
wFlags, \
|
|
pdispparams, \
|
|
pvarResult, \
|
|
pexcepinfo, \
|
|
puArgErr \
|
|
)); \
|
|
} \
|
|
|
|
//
|
|
// DEFINE_IADs_Implementation
|
|
//
|
|
|
|
#define DEFINE_IADs_Implementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::get_Name(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreName(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_ADsPath(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreADsPath(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Class(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreADsClass(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Parent(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreParent(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Schema(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreSchema(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_GUID(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreGUID(retval)); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::GetEx(THIS_ BSTR bstrName, VARIANT FAR* pvProp) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::PutEx(THIS_ long lnControlCode, BSTR bstrName, VARIANT vProp) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::Get(THIS_ BSTR bstrName, VARIANT FAR* pvProp) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Put(THIS_ BSTR bstrName, VARIANT vProp) \
|
|
{ \
|
|
RRETURN(E_NOTIMPL); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::GetInfoEx(THIS_ VARIANT vProperties, long lnReserved) \
|
|
{ \
|
|
RRETURN(GetInfo()); \
|
|
}
|
|
|
|
//
|
|
// DEFINE_IADs_Implementation
|
|
//
|
|
|
|
#define DEFINE_IADs_TempImplementation(cls) \
|
|
STDMETHODIMP \
|
|
cls::get_Name(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreName(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_ADsPath(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreADsPath(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Class(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreADsClass(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Parent(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreParent(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_Schema(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreSchema(retval)); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::get_GUID(THIS_ BSTR FAR* retval) \
|
|
{ \
|
|
RRETURN(get_CoreGUID(retval)); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::GetInfoEx(THIS_ VARIANT vProperties, long lnReserved) \
|
|
{ \
|
|
RRETURN(GetInfo()); \
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define DEFINE_IADs_PutGetImplementation(cls, SchemaClassTable, dwTableSize) \
|
|
STDMETHODIMP \
|
|
cls::Get(THIS_ BSTR bstrName, VARIANT FAR* pvProp) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericGetPropertyManager( \
|
|
_pPropertyCache, \
|
|
bstrName, \
|
|
pvProp \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Put(THIS_ BSTR bstrName, VARIANT vProp) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericPutPropertyManager( \
|
|
_pPropertyCache, \
|
|
SchemaClassTable, \
|
|
dwTableSize, \
|
|
bstrName, \
|
|
vProp \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::GetEx(THIS_ BSTR bstrName, VARIANT FAR* pvProp) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericGetExPropertyManager( \
|
|
GetObjectState(), \
|
|
_pPropertyCache, \
|
|
bstrName, \
|
|
pvProp \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::PutEx(THIS_ long lnControlCode, BSTR bstrName, VARIANT vProp) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericPutExPropertyManager( \
|
|
_pPropertyCache, \
|
|
SchemaClassTable, \
|
|
dwTableSize, \
|
|
bstrName, \
|
|
vProp \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
}
|
|
|
|
|
|
#define DEFINE_IADsPropertyList_Implementation(cls, SchemaClassTable, dwTableSize) \
|
|
STDMETHODIMP \
|
|
cls::get_PropertyCount(THIS_ long FAR * plCount) \
|
|
{ \
|
|
HRESULT hr = E_FAIL; \
|
|
\
|
|
hr = GenericPropCountPropertyManager( \
|
|
_pPropertyCache, \
|
|
plCount \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Next(THIS_ VARIANT FAR *pVariant) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericNextPropertyManager( \
|
|
_pPropertyCache, \
|
|
pVariant \
|
|
); \
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Skip(THIS_ long cElements) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
\
|
|
hr = GenericSkipPropertyManager( \
|
|
_pPropertyCache, \
|
|
cElements \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
\
|
|
\
|
|
STDMETHODIMP \
|
|
cls::Reset() \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericResetPropertyManager( \
|
|
_pPropertyCache \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::ResetPropertyItem(THIS_ VARIANT varEntry) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericDeletePropertyManager( \
|
|
_pPropertyCache, \
|
|
varEntry \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::GetPropertyItem(THIS_ BSTR bstrName, LONG lnADsType, VARIANT * pVariant) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericGetPropItemPropertyManager( \
|
|
_pPropertyCache, \
|
|
GetObjectState(), \
|
|
bstrName, \
|
|
lnADsType, \
|
|
pVariant \
|
|
); \
|
|
\
|
|
\
|
|
RRETURN(hr); \
|
|
\
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::PutPropertyItem(THIS_ VARIANT varData) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericPutPropItemPropertyManager( \
|
|
_pPropertyCache, \
|
|
SchemaClassTable, \
|
|
dwTableSize, \
|
|
varData \
|
|
); \
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
\
|
|
STDMETHODIMP \
|
|
cls::PurgePropertyList(THIS_) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericPurgePropertyManager( \
|
|
_pPropertyCache \
|
|
); \
|
|
\
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
STDMETHODIMP \
|
|
cls::Item(THIS_ VARIANT varIndex, VARIANT * pVariant) \
|
|
{ \
|
|
HRESULT hr = S_OK; \
|
|
\
|
|
hr = GenericItemPropertyManager( \
|
|
_pPropertyCache, \
|
|
GetObjectState(), \
|
|
varIndex, \
|
|
pVariant \
|
|
); \
|
|
\
|
|
\
|
|
RRETURN(hr); \
|
|
} \
|
|
|
|
|
|
#define CHECK_AND_SET_EXTENDED_ERROR(dwStatus, hr) \
|
|
if (dwStatus) { \
|
|
hr = CheckAndSetExtendedError(dwStatus); \
|
|
BAIL_ON_FAILURE(hr); \
|
|
}
|
|
|
|
\
|
|
#define NW_DECLARE_ISupportErrorInfo_METHODS \
|
|
STDMETHOD(InterfaceSupportsErrorInfo)(THIS_ REFIID riid);
|
|
|
|
|
|
#define NW_RRETURN_EXP_IF_ERR(hr) \
|
|
RRETURN(hr);
|
|
|
|
|