|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: var2nds.cxx
//
// Contents: NDS Object to Variant Copy Routines
//
// Functions:
//
// History: 25-Apr-96 KrishnaG Created.
//
//
//
//
// NDS_ASN1_TYPE_1
//
// NDS_ASN1_TYPE_2
//
// NDS_ASN1_TYPE_3
//
// NDS_ASN1_TYPE_4
//
// NDS_ASN1_TYPE_5
//
// NDS_ASN1_TYPE_6
//
// NDS_ASN1_TYPE_7
//
// NDS_ASN1_TYPE_8
//
// NDS_ASN1_TYPE_9
//
// NDS_ASN1_TYPE_10
//
// NDS_ASN1_TYPE_11
//
// NDS_ASN1_TYPE_12
//
// NDS_ASN1_TYPE_13
//
// NDS_ASN1_TYPE_14
//
// NDS_ASN1_TYPE_15
//
// NDS_ASN1_TYPE_16
//
// NDS_ASN1_TYPE_17
//
// NDS_ASN1_TYPE_18
//
// NDS_ASN1_TYPE_19
//
// NDS_ASN1_TYPE_20
//
// NDS_ASN1_TYPE_21
//
// NDS_ASN1_TYPE_22
//
// NDS_ASN1_TYPE_23
//
// NDS_ASN1_TYPE_24
//
// NDS_ASN1_TYPE_25
//
// NDS_ASN1_TYPE_26
//
// NDS_ASN1_TYPE_27
//
//
//----------------------------------------------------------------------------
#include "nds.hxx"
//
// NdsType objects copy code
//
HRESULT VarTypeToNdsTypeCopyNDSSynId1( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_1;
lpNdsDestObject->NdsValue.value_1.DNString = AllocADsStr( lpVarSrcObject->bstrVal );
if ((!lpNdsDestObject->NdsValue.value_1.DNString) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId2( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_2;
lpNdsDestObject->NdsValue.value_2.CaseExactString = AllocADsStr( lpVarSrcObject->bstrVal ); if ((!lpNdsDestObject->NdsValue.value_2.CaseExactString) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId3( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject )
{ HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_3;
lpNdsDestObject->NdsValue.value_3.CaseIgnoreString = AllocADsStr( lpVarSrcObject->bstrVal ); if ((!lpNdsDestObject->NdsValue.value_3.CaseIgnoreString) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); }
RRETURN(hr);
}
HRESULT VarTypeToNdsTypeCopyNDSSynId4( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_4;
lpNdsDestObject->NdsValue.value_4.PrintableString = AllocADsStr( lpVarSrcObject->bstrVal ); if ((!lpNdsDestObject->NdsValue.value_4.PrintableString) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId5( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_5;
lpNdsDestObject->NdsValue.value_5.NumericString = AllocADsStr( lpVarSrcObject->bstrVal ); if ((!lpNdsDestObject->NdsValue.value_5.NumericString) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId6( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; DWORD dwSLBound = 0; DWORD dwSUBound = 0; long i; LPNDS_ASN1_TYPE_6 pCurrent = NULL; IADsCaseIgnoreList FAR * pCaseIgnoreList = NULL; IDispatch FAR * pDispatch = NULL; BYTE* pbParameter = NULL; VARIANT varCaseIgnoreList; VARIANT varElement;
VariantInit(&varCaseIgnoreList); if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsCaseIgnoreList, (void **)&pCaseIgnoreList ); BAIL_ON_FAILURE(hr);
hr = pCaseIgnoreList->get_CaseIgnoreList( &varCaseIgnoreList ); BAIL_ON_FAILURE(hr);
if(!((V_VT(&varCaseIgnoreList) & VT_VARIANT) && V_ISARRAY(&varCaseIgnoreList))) { return(E_FAIL); } if ((V_ARRAY(&varCaseIgnoreList))->cDims != 1) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if ((V_ARRAY(&varCaseIgnoreList))->rgsabound[0].cElements <= 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
hr = SafeArrayGetLBound(V_ARRAY(&varCaseIgnoreList), 1, (long FAR *)&dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(V_ARRAY(&varCaseIgnoreList), 1, (long FAR *)&dwSUBound ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_6; pCurrent = &lpNdsDestObject->NdsValue.value_6; for (i = dwSLBound; i <= (long)dwSUBound; i++) { VariantInit(&varElement); hr = SafeArrayGetElement(V_ARRAY(&varCaseIgnoreList), (long FAR *)&i, &varElement ); BAIL_ON_FAILURE(hr); pCurrent->String = AllocADsStr(V_BSTR(&varElement)); if ((!pCurrent->String) && (V_BSTR(&varElement))) { RRETURN(E_OUTOFMEMORY); } if (i != (long)dwSUBound) { pCurrent->Next = (LPNDS_ASN1_TYPE_6)AllocADsMem(sizeof(NDS_ASN1_TYPE_6)); if (!pCurrent->Next) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); } pCurrent = pCurrent->Next; } VariantClear(&varElement); } pCurrent->Next = NULL; RRETURN(S_OK);
error: VariantClear(&varCaseIgnoreList); if (pCaseIgnoreList) { pCaseIgnoreList->Release(); } RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId7( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BOOL){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_7;
lpNdsDestObject->NdsValue.value_7.Boolean = (lpVarSrcObject->boolVal)? TRUE:FALSE;
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId8( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_8;
if (lpVarSrcObject->vt == VT_I4) lpNdsDestObject->NdsValue.value_8.Integer = lpVarSrcObject->lVal; else if (lpVarSrcObject->vt == VT_I2) lpNdsDestObject->NdsValue.value_8.Integer = lpVarSrcObject->iVal; else hr = E_ADS_CANT_CONVERT_DATATYPE;
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId9( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr; lpNdsDestObject->NdsType = NDS_SYNTAX_ID_9; hr = VariantToBinary( lpVarSrcObject, &lpNdsDestObject->NdsValue.value_9.Length, &lpNdsDestObject->NdsValue.value_9.OctetString ); RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId10( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_10;
lpNdsDestObject->NdsValue.value_10.TelephoneNumber = AllocADsStr( lpVarSrcObject->bstrVal );
if ((!lpNdsDestObject->NdsValue.value_10.TelephoneNumber) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); } RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId11( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsFaxNumber FAR * pFaxNumber = NULL; IDispatch FAR * pDispatch = NULL; BYTE* pbParameter = NULL; VARIANT varParameters; BSTR bstrVal;
VariantInit(&varParameters);
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsFaxNumber, (void **)&pFaxNumber ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_11;
hr = pFaxNumber->get_TelephoneNumber( &bstrVal ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_11.TelephoneNumber = AllocADsStr( bstrVal ); if ((!lpNdsDestObject->NdsValue.value_11.TelephoneNumber) && (bstrVal)) { RRETURN(E_OUTOFMEMORY); }
hr = pFaxNumber->get_Parameters( &varParameters ); BAIL_ON_FAILURE(hr);
hr = VariantToBinary( &varParameters, &lpNdsDestObject->NdsValue.value_11.NumberOfBits, &lpNdsDestObject->NdsValue.value_11.Parameters ); BAIL_ON_FAILURE(hr);
error: VariantClear(&varParameters); if (pFaxNumber) { pFaxNumber->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId12( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsNetAddress FAR * pNetAddress = NULL; IDispatch FAR * pDispatch = NULL; long dwAddressType = 0; BYTE* pbAddress = NULL; VARIANT varAddress;
VariantInit(&varAddress); if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject); hr = pDispatch->QueryInterface( IID_IADsNetAddress, (void **)&pNetAddress ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_12;
hr = pNetAddress->get_AddressType( &dwAddressType ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_12.AddressType = dwAddressType;
VariantInit(&varAddress); hr = pNetAddress->get_Address( &varAddress ); BAIL_ON_FAILURE(hr);
hr = VariantToBinary( &varAddress, &lpNdsDestObject->NdsValue.value_12.AddressLength, &lpNdsDestObject->NdsValue.value_12.Address ); BAIL_ON_FAILURE(hr);
error: VariantClear(&varAddress); if (pNetAddress) { pNetAddress->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId13( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; DWORD dwSLBound = 0; DWORD dwSUBound = 0; long i; LPNDS_ASN1_TYPE_13 pCurrent = NULL; IADsOctetList FAR * pOctetList= NULL; IDispatch FAR * pDispatch = NULL; BYTE* pbParameter = NULL; VARIANT varOctetList; VARIANT varElement;
VariantInit(&varOctetList); if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject); hr = pDispatch->QueryInterface( IID_IADsOctetList, (void **)&pOctetList ); BAIL_ON_FAILURE(hr);
hr = pOctetList->get_OctetList(&varOctetList); BAIL_ON_FAILURE(hr);
if(!((V_VT(&varOctetList) & VT_VARIANT) && V_ISARRAY(&varOctetList))) { return(E_FAIL); } if ((V_ARRAY(&varOctetList))->cDims != 1) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if ((V_ARRAY(&varOctetList))->rgsabound[0].cElements <= 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
hr = SafeArrayGetLBound(V_ARRAY(&varOctetList), 1, (long FAR *)&dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(V_ARRAY(&varOctetList), 1, (long FAR *)&dwSUBound ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_13; pCurrent = &lpNdsDestObject->NdsValue.value_13; for (i = dwSLBound; i <= (long)dwSUBound; i++) { VariantInit(&varElement); hr = SafeArrayGetElement(V_ARRAY(&varOctetList), (long FAR *)&i, &varElement ); BAIL_ON_FAILURE(hr); hr = VariantToBinary( &varElement, &pCurrent->Length, &pCurrent->Data ); BAIL_ON_FAILURE(hr); if (i != (long)dwSUBound) { pCurrent->Next = (LPNDS_ASN1_TYPE_13)AllocADsMem(sizeof(NDS_ASN1_TYPE_13)); if (!pCurrent->Next) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); } pCurrent = pCurrent->Next; } VariantClear(&varElement); } pCurrent->Next = NULL;
error: VariantClear(&varOctetList); if (pOctetList) { pOctetList->Release(); } RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId14( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsEmail FAR * pEmail = NULL; IDispatch FAR * pDispatch = NULL; long dwAddressType = 0; BSTR bstrAddress;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject); hr = pDispatch->QueryInterface( IID_IADsEmail, (void **)&pEmail ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_14;
hr = pEmail->get_Type( &dwAddressType ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_14.Type = dwAddressType;
hr = pEmail->get_Address( &bstrAddress ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_14.Address= AllocADsStr( bstrAddress ); if ((!lpNdsDestObject->NdsValue.value_14.Address) && (bstrAddress)) { RRETURN(E_OUTOFMEMORY); }
error: if (pEmail) { pEmail->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId15( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsPath FAR * pPath = NULL; IDispatch FAR * pDispatch = NULL; DWORD dwType = 0; BSTR bstrVolumeName = NULL; BSTR bstrPath = NULL;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsPath, (void **)&pPath ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_15;
hr = pPath->get_VolumeName( &bstrVolumeName ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_15.VolumeName= AllocADsStr(bstrVolumeName); if ((!lpNdsDestObject->NdsValue.value_15.VolumeName) && (bstrVolumeName)) { RRETURN(E_OUTOFMEMORY); }
hr = pPath->get_Path( &bstrPath ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_15.Path= AllocADsStr(bstrPath); if ((!lpNdsDestObject->NdsValue.value_15.Path) && (bstrPath)) { RRETURN(E_OUTOFMEMORY); }
hr = pPath->get_Type((LONG *)&dwType); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_15.Type = dwType;
error: if (pPath) { pPath->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId16( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsReplicaPointer FAR * pReplicaPointer = NULL; IDispatch FAR * pDispatch = NULL; DWORD dwReplicaType = 0; DWORD dwReplicaNumber = 0; DWORD dwCount = 0; BSTR bstrServerName = NULL; NDSOBJECT object; VARIANT varAddress;
VariantInit(&varAddress); if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsReplicaPointer, (void **)&pReplicaPointer ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_16;
hr = pReplicaPointer->get_ServerName( &bstrServerName ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_16.ServerName= AllocADsStr(bstrServerName); if ((!lpNdsDestObject->NdsValue.value_16.ServerName) && (bstrServerName)) { RRETURN(E_OUTOFMEMORY); }
hr = pReplicaPointer->get_ReplicaType((LONG *)&dwReplicaType); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_16.ReplicaType= dwReplicaType;
hr = pReplicaPointer->get_ReplicaNumber((LONG *)&dwReplicaNumber); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_16.ReplicaNumber= dwReplicaNumber;
hr = pReplicaPointer->get_Count((LONG *)&dwCount); BAIL_ON_FAILURE(hr);
if (dwCount == 0) { lpNdsDestObject->NdsValue.value_16.Count = 0; lpNdsDestObject->NdsValue.value_16.ReplicaAddressHints = NULL; } else { //
// We only support the setting of 1 ReplicaAddressHints in the
// ReplicaPointer. Supporting more than 1 requires the support
// of marshalling an array variant which is more complex.
// Judging that there is no real usage of this interface since
// the Replica Pointer is for NDS internal use only. We have
// decided that we'll postpone this to post W2K and will fix it
// only if there is a need.
//
lpNdsDestObject->NdsValue.value_16.Count = 1; hr = pReplicaPointer->get_ReplicaAddressHints(&varAddress); BAIL_ON_FAILURE(hr); hr = VarTypeToNdsTypeCopyNDSSynId12( &varAddress, &object ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_16.ReplicaAddressHints = (LPNDS_ASN1_TYPE_12)AllocADsMem(sizeof(NDS_ASN1_TYPE_12)); if (lpNdsDestObject->NdsValue.value_16.ReplicaAddressHints == NULL) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); } memcpy(lpNdsDestObject->NdsValue.value_16.ReplicaAddressHints, &object.NdsValue.value_12, sizeof(NDS_ASN1_TYPE_12)); }
error: VariantClear(&varAddress); if (pReplicaPointer) { pReplicaPointer->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId17( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsAcl FAR * pSecDes = NULL; IDispatch FAR * pDispatch = NULL; DWORD dwPrivileges = 0; BSTR bstrProtectedAttrName = NULL; BSTR bstrSubjectName = NULL;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsAcl, (void **)&pSecDes ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_17;
hr = pSecDes->get_ProtectedAttrName( &bstrProtectedAttrName ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsValue.value_17.ProtectedAttrName = AllocADsStr(bstrProtectedAttrName); if ((!lpNdsDestObject->NdsValue.value_17.ProtectedAttrName) && (bstrProtectedAttrName)) { RRETURN(E_OUTOFMEMORY); }
hr = pSecDes->get_SubjectName( &bstrSubjectName ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsValue.value_17.SubjectName= AllocADsStr(bstrSubjectName); if ((!lpNdsDestObject->NdsValue.value_17.SubjectName) && (bstrSubjectName)) { RRETURN(E_OUTOFMEMORY); }
hr = pSecDes->get_Privileges((LONG *)&dwPrivileges); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_17.Privileges= dwPrivileges;
error:
if (pSecDes) { pSecDes->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId18( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; DWORD dwSLBound = 0; DWORD dwSUBound = 0; long i; IADsPostalAddress FAR * pPostalAddress = NULL; IDispatch FAR * pDispatch = NULL; VARIANT varPostalAddress; VARIANT varElement; BSTR bstrElement; VariantInit(&varPostalAddress); if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsPostalAddress, (void **)&pPostalAddress ); BAIL_ON_FAILURE(hr);
hr = pPostalAddress->get_PostalAddress( &varPostalAddress ); BAIL_ON_FAILURE(hr);
if(!((V_VT(&varPostalAddress) & VT_VARIANT) && V_ISARRAY(&varPostalAddress))) { return(E_FAIL); } lpNdsDestObject->NdsType = NDS_SYNTAX_ID_18;
if ((V_ARRAY(&varPostalAddress))->cDims != 1) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if ( ((V_ARRAY(&varPostalAddress))->rgsabound[0].cElements <= 0) || ((V_ARRAY(&varPostalAddress))->rgsabound[0].cElements >6) ) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
hr = SafeArrayGetLBound(V_ARRAY(&varPostalAddress), 1, (long FAR *)&dwSLBound ); BAIL_ON_FAILURE(hr);
hr = SafeArrayGetUBound(V_ARRAY(&varPostalAddress), 1, (long FAR *)&dwSUBound ); BAIL_ON_FAILURE(hr);
for (i = dwSLBound; i <= (long)dwSUBound; i++) { VariantInit(&varElement); hr = SafeArrayGetElement(V_ARRAY(&varPostalAddress), (long FAR *)&i, &varElement ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_18.PostalAddress[i-dwSLBound] = AllocADsStr(V_BSTR(&varElement)); if ((!lpNdsDestObject->NdsValue.value_18.PostalAddress[i-dwSLBound]) && (V_BSTR(&varElement))) { RRETURN(E_OUTOFMEMORY); } VariantClear(&varElement); }
error: VariantClear(&varPostalAddress); if (pPostalAddress) { pPostalAddress->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId19( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsTimestamp FAR * pTime = NULL; IDispatch FAR * pDispatch = NULL; long dwEventID = 0; long dwWholeSeconds = 0;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsTimestamp, (void **)&pTime ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_19;
hr = pTime->get_WholeSeconds( &dwWholeSeconds ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_19.WholeSeconds= dwWholeSeconds; BAIL_ON_FAILURE(hr);
hr = pTime->get_EventID( &dwEventID ); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_19.EventID = dwEventID; BAIL_ON_FAILURE(hr);
error: if (pTime) { pTime->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId20( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_20;
lpNdsDestObject->NdsValue.value_20.ClassName = AllocADsStr( lpVarSrcObject->bstrVal ); if ((!lpNdsDestObject->NdsValue.value_20.ClassName) && (lpVarSrcObject->bstrVal)) { RRETURN(E_OUTOFMEMORY); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId21( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr; lpNdsDestObject->NdsType = NDS_SYNTAX_ID_21; hr = VariantToBinary( lpVarSrcObject, &lpNdsDestObject->NdsValue.value_21.Length, &lpNdsDestObject->NdsValue.value_21.Data ); RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId22( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject )
{ HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_I4){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_22;
lpNdsDestObject->NdsValue.value_22.Counter = lpVarSrcObject->lVal;
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId23( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsBackLink FAR * pBackLink = NULL; IDispatch FAR * pDispatch = NULL; long dwRemoteID = 0; BSTR bstrObjectName = NULL;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsBackLink, (void **)&pBackLink ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_23;
hr = pBackLink->get_ObjectName( &bstrObjectName ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsValue.value_23.ObjectName= AllocADsStr(bstrObjectName); if ((!lpNdsDestObject->NdsValue.value_23.ObjectName) && (bstrObjectName)) { RRETURN(E_OUTOFMEMORY); }
hr = pBackLink->get_RemoteID((LONG *)&dwRemoteID); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_23.RemoteID = dwRemoteID;
error: if (pBackLink) { pBackLink->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId24( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_DATE){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_24;
hr = ConvertDATEtoDWORD( lpVarSrcObject->date, &(lpNdsDestObject->NdsValue.value_24.Time), TRUE );
RRETURN(hr);
}
HRESULT VarTypeToNdsTypeCopyNDSSynId25( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsTypedName FAR * pTypedName = NULL; IDispatch FAR * pDispatch = NULL; DWORD dwLevel = 0; DWORD dwInterval = 0; BSTR bstrObjectName = NULL;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsTypedName, (void **)&pTypedName ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_25;
hr = pTypedName->get_ObjectName( &bstrObjectName ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsValue.value_25.ObjectName= AllocADsStr(bstrObjectName); if ((!lpNdsDestObject->NdsValue.value_25.ObjectName) && (bstrObjectName)) { RRETURN(E_OUTOFMEMORY); }
hr = pTypedName->get_Level((LONG *)&dwLevel); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_25.Level = dwLevel;
hr = pTypedName->get_Interval((LONG *)&dwInterval); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_25.Interval= dwInterval;
error: if (pTypedName) { pTypedName->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId26( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; IADsHold FAR * pHold = NULL; IDispatch FAR * pDispatch = NULL; DWORD dwAmount = 0; BSTR bstrObjectName = NULL;
if (V_VT(lpVarSrcObject) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); }
pDispatch = V_DISPATCH(lpVarSrcObject);
hr = pDispatch->QueryInterface( IID_IADsHold, (void **)&pHold ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_26;
hr = pHold->get_ObjectName( &bstrObjectName ); BAIL_ON_FAILURE(hr);
lpNdsDestObject->NdsValue.value_26.ObjectName= AllocADsStr(bstrObjectName); if ((!lpNdsDestObject->NdsValue.value_26.ObjectName) && (bstrObjectName)) { RRETURN(E_OUTOFMEMORY); }
hr = pHold->get_Amount((LONG *)&dwAmount); BAIL_ON_FAILURE(hr); lpNdsDestObject->NdsValue.value_26.Amount = dwAmount;
error: if (pHold) { pHold->Release(); }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyNDSSynId27( PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject )
{ HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_I4){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
lpNdsDestObject->NdsType = NDS_SYNTAX_ID_27;
lpNdsDestObject->NdsValue.value_27.Interval = lpVarSrcObject->lVal;
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopy( DWORD dwNdsType, PVARIANT lpVarSrcObject, PNDSOBJECT lpNdsDestObject ) { HRESULT hr = S_OK; switch (dwNdsType){ case 1: hr = VarTypeToNdsTypeCopyNDSSynId1( lpVarSrcObject, lpNdsDestObject ); break;
case 2: hr = VarTypeToNdsTypeCopyNDSSynId2( lpVarSrcObject, lpNdsDestObject ); break;
case 3: hr = VarTypeToNdsTypeCopyNDSSynId3( lpVarSrcObject, lpNdsDestObject ); break;
case 4: hr = VarTypeToNdsTypeCopyNDSSynId4( lpVarSrcObject, lpNdsDestObject ); break;
case 5: hr = VarTypeToNdsTypeCopyNDSSynId5( lpVarSrcObject, lpNdsDestObject ); break;
case 6: hr = VarTypeToNdsTypeCopyNDSSynId6( lpVarSrcObject, lpNdsDestObject ); break;
case 7: hr = VarTypeToNdsTypeCopyNDSSynId7( lpVarSrcObject, lpNdsDestObject ); break;
case 8: hr = VarTypeToNdsTypeCopyNDSSynId8( lpVarSrcObject, lpNdsDestObject ); break;
case 9: hr = VarTypeToNdsTypeCopyNDSSynId9( lpVarSrcObject, lpNdsDestObject ); break;
case 10: hr = VarTypeToNdsTypeCopyNDSSynId10( lpVarSrcObject, lpNdsDestObject ); break;
case 11: hr = VarTypeToNdsTypeCopyNDSSynId11( lpVarSrcObject, lpNdsDestObject ); break;
case 12: hr = VarTypeToNdsTypeCopyNDSSynId12( lpVarSrcObject, lpNdsDestObject ); break;
case 13: hr = VarTypeToNdsTypeCopyNDSSynId13( lpVarSrcObject, lpNdsDestObject ); break;
case 14: hr = VarTypeToNdsTypeCopyNDSSynId14( lpVarSrcObject, lpNdsDestObject ); break;
case 15: hr = VarTypeToNdsTypeCopyNDSSynId15( lpVarSrcObject, lpNdsDestObject ); break;
case 16: hr = VarTypeToNdsTypeCopyNDSSynId16( lpVarSrcObject, lpNdsDestObject ); break;
case 17: hr = VarTypeToNdsTypeCopyNDSSynId17( lpVarSrcObject, lpNdsDestObject ); break;
case 18: hr = VarTypeToNdsTypeCopyNDSSynId18( lpVarSrcObject, lpNdsDestObject ); break;
case 19: hr = VarTypeToNdsTypeCopyNDSSynId19( lpVarSrcObject, lpNdsDestObject ); break;
case 20: hr = VarTypeToNdsTypeCopyNDSSynId20( lpVarSrcObject, lpNdsDestObject ); break;
case 21: hr = VarTypeToNdsTypeCopyNDSSynId21( lpVarSrcObject, lpNdsDestObject ); break;
case 22: hr = VarTypeToNdsTypeCopyNDSSynId22( lpVarSrcObject, lpNdsDestObject ); break;
case 23: hr = VarTypeToNdsTypeCopyNDSSynId23( lpVarSrcObject, lpNdsDestObject ); break;
case 24: hr = VarTypeToNdsTypeCopyNDSSynId24( lpVarSrcObject, lpNdsDestObject ); break;
case 25: hr = VarTypeToNdsTypeCopyNDSSynId25( lpVarSrcObject, lpNdsDestObject ); break;
case 26: hr = VarTypeToNdsTypeCopyNDSSynId26( lpVarSrcObject, lpNdsDestObject ); break;
case 27: hr = VarTypeToNdsTypeCopyNDSSynId27( lpVarSrcObject, lpNdsDestObject ); break;
default: hr = E_FAIL; break; }
RRETURN(hr); }
HRESULT VarTypeToNdsTypeCopyConstruct( DWORD dwNdsType, LPVARIANT pVarSrcObjects, DWORD *pdwNumObjects, LPNDSOBJECT * ppNdsDestObjects ) {
DWORD i = 0; LPNDSOBJECT pNdsDestObjects = NULL; HRESULT hr = S_OK; VARIANT varNDSAcl; IDispatch * pDispatch = NULL; IADsSecurityDescriptor * pSecDes = NULL; DWORD dwNumObjects = *pdwNumObjects;
//
// If it is a security descriptor, do special conversion
//
if (dwNdsType == 17) {
//
// Bail out if it contains more than 1 object
//
if (dwNumObjects != 1) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if (V_VT(pVarSrcObjects) != VT_DISPATCH){ hr = E_FAIL; BAIL_ON_FAILURE(hr); } pDispatch = V_DISPATCH(pVarSrcObjects); hr = pDispatch->QueryInterface( IID_IADsSecurityDescriptor, (void **)&pSecDes ); BAIL_ON_FAILURE(hr);
hr = ConvertSecDesToNDSAclVarArray( pSecDes, &varNDSAcl ); BAIL_ON_FAILURE(hr);
hr = ConvertSafeArrayToVariantArray( varNDSAcl, &pVarSrcObjects, &dwNumObjects ); BAIL_ON_FAILURE(hr); pNdsDestObjects = (LPNDSOBJECT)AllocADsMem( dwNumObjects * sizeof(NDSOBJECT) );
if (!pNdsDestObjects) { RRETURN(E_FAIL); } *pdwNumObjects = dwNumObjects; } else { pNdsDestObjects = (LPNDSOBJECT)AllocADsMem( dwNumObjects * sizeof(NDSOBJECT) );
if (!pNdsDestObjects) { RRETURN(E_FAIL); } } for (i = 0; i < dwNumObjects; i++ ) { hr = VarTypeToNdsTypeCopy( dwNdsType, pVarSrcObjects + i, pNdsDestObjects + i ); BAIL_ON_FAILURE(hr); }
*ppNdsDestObjects = pNdsDestObjects;
if (pSecDes) { pSecDes->Release(); }
RRETURN(S_OK);
error:
if (pNdsDestObjects) { NdsTypeFreeNdsObjects( pNdsDestObjects, dwNumObjects ); }
if (pSecDes) { pSecDes->Release(); }
*ppNdsDestObjects = NULL;
RRETURN(hr); }
|