|
|
/+--------------------------------------------------------------------------- //
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: ndsmrshl.cxx
//
// Contents:
//
// Functions:
//
//
// History: 25-Apr-96 KrishnaG Created.
//
//----------------------------------------------------------------------------
#include "nds.hxx"
HRESULT CopyNDSNetAddressToNDS12( pNet_Address_T lpSrcNetAddress, LPNDS_ASN1_TYPE_12 lpDest12 ) { LPBYTE pBuffer = NULL;
lpDest12->AddressType = lpSrcNetAddress->addressType;
lpDest12->AddressLength = lpSrcNetAddress->addressLength;
if (lpSrcNetAddress->addressLength) { pBuffer = (LPBYTE)AllocADsMem(lpSrcNetAddress->addressLength);
if (!pBuffer) { RRETURN(E_OUTOFMEMORY); }
memcpy(pBuffer, lpSrcNetAddress->address, lpSrcNetAddress->addressLength);
lpDest12->Address = pBuffer; }else { lpDest12->Address = NULL; }
RRETURN(S_OK);
}
HRESULT CopyNDS12ToNDSNetAddress( LPNDS_ASN1_TYPE_12 lpSrc12, pNet_Address_T lpDestNetAddress ) { LPBYTE pBuffer = NULL;
lpDestNetAddress->addressType = lpSrc12->AddressType;
lpDestNetAddress->addressLength = lpSrc12->AddressLength;
if (lpSrc12->AddressLength) { pBuffer = (LPBYTE)AllocADsMem(lpSrc12->AddressLength);
if (!pBuffer) { RRETURN(E_OUTOFMEMORY); }
memcpy(pBuffer, lpSrc12->Address, lpSrc12->AddressLength);
lpDestNetAddress->address = pBuffer; }else { lpDestNetAddress->address = NULL; }
RRETURN(S_OK);
}
HRESULT CopyNdsValueToNdsObject( nptr attrVal, nuint32 luAttrValSize, nuint32 luSyntax, PNDSOBJECT pNdsObject ) { HRESULT hr = S_OK;
if (!pNdsObject || !attrVal) { RRETURN (E_ADS_BAD_PARAMETER); }
pNdsObject->NdsType = luSyntax;
switch (luSyntax) { case 1:
pNdsObject->NdsValue.value_1.DNString = AllocADsStr( (LPWSTR) attrVal); break;
case 2:
pNdsObject->NdsValue.value_2.CaseExactString = AllocADsStr( (LPWSTR) attrVal); break;
case 3:
pNdsObject->NdsValue.value_3.CaseIgnoreString = AllocADsStr( (LPWSTR) attrVal); break;
case 4:
pNdsObject->NdsValue.value_4.PrintableString = AllocADsStr( (LPWSTR) attrVal); break;
case 5:
pNdsObject->NdsValue.value_5.NumericString = AllocADsStr( (LPWSTR) attrVal); break;
case 6: {
pCI_List_T pCaseIgnoreList = (pCI_List_T) attrVal;
LPNDS_ASN1_TYPE_6 pNdsTempASN1_6 = NULL; LPNDS_ASN1_TYPE_6 pNdsNextASN1_6 = NULL; pNdsTempASN1_6 = &(pNdsObject->NdsValue.value_6);
pNdsObject->NdsType = NDS_SYNTAX_ID_6;
if (! pCaseIgnoreList->s) { pNdsTempASN1_6->String = NULL; pNdsTempASN1_6->Next = NULL; RRETURN (S_OK); } pNdsTempASN1_6->String = (LPWSTR)AllocADsStr((LPWSTR) pCaseIgnoreList->s); while ( pCaseIgnoreList->next != NULL ) { pCaseIgnoreList = pCaseIgnoreList->next; pNdsNextASN1_6 = (LPNDS_ASN1_TYPE_6)AllocADsMem(sizeof(NDS_ASN1_TYPE_6));
if (!pNdsNextASN1_6) { //
// BUGBUG: need to clean up the list
//
RRETURN(E_OUTOFMEMORY); }
pNdsNextASN1_6->String = (LPWSTR)AllocADsStr((LPWSTR) pCaseIgnoreList->s);
if (!pNdsNextASN1_6->String) { //
// BUGBUG: need to clean up the list
//
RRETURN(E_OUTOFMEMORY); } pNdsTempASN1_6->Next = pNdsNextASN1_6; pNdsTempASN1_6 = pNdsNextASN1_6; }
pNdsTempASN1_6->Next = NULL;
break;
}
case 7:
pNdsObject->NdsValue.value_7.Boolean = *((Boolean_T *) attrVal); break;
case 8:
pNdsObject->NdsValue.value_8.Integer = *((Integer_T *) attrVal); break;
case 9: {
pOctet_String_T lpNdsOctetString = (pOctet_String_T) attrVal;
if (lpNdsOctetString->length) {
pNdsObject->NdsValue.value_9.Length = lpNdsOctetString->length;
pNdsObject->NdsValue.value_9.OctetString = (LPBYTE) AllocADsMem(lpNdsOctetString->length); if (!pNdsObject->NdsValue.value_9.OctetString) { RRETURN(E_OUTOFMEMORY); }
memcpy( pNdsObject->NdsValue.value_9.OctetString, lpNdsOctetString->data, lpNdsOctetString->length ); } else {
pNdsObject->NdsValue.value_9.OctetString = NULL; pNdsObject->NdsValue.value_9.Length = 0; } break; }
case 10:
pNdsObject->NdsValue.value_10.TelephoneNumber = AllocADsStr( (LPWSTR) attrVal); break;
case 11: { pFax_Number_T pNdsFaxNumber = (pFax_Number_T) attrVal; LPNDS_ASN1_TYPE_11 pNdsASN1_11 = &(pNdsObject->NdsValue.value_11);
pNdsASN1_11->TelephoneNumber = AllocADsStr((LPWSTR)pNdsFaxNumber->telephoneNumber); pNdsASN1_11->NumberOfBits = pNdsFaxNumber->parameters.numOfBits; pNdsASN1_11->Parameters = (LPBYTE) AllocADsMem((pNdsASN1_11->NumberOfBits + 7) / 8); if (!pNdsASN1_11->Parameters) { RRETURN (E_OUTOFMEMORY); }
memcpy( pNdsASN1_11->Parameters, pNdsFaxNumber->parameters.data, ((pNdsASN1_11->NumberOfBits+7) / 8) );
break; }
case 12: { pNet_Address_T pNetAddress = (pNet_Address_T) attrVal; LPBYTE pBuffer = NULL; pNdsObject->NdsValue.value_12.AddressType = pNetAddress->addressType; pNdsObject->NdsValue.value_12.AddressLength = pNetAddress->addressLength; if (pNetAddress->addressLength) { pBuffer = (LPBYTE)AllocADsMem(pNetAddress->addressLength); if (!pBuffer) { RRETURN(E_OUTOFMEMORY); } memcpy(pBuffer, pNetAddress->address, pNetAddress->addressLength); pNdsObject->NdsValue.value_12.Address = pBuffer; } break; }
case 13: {
pOctet_List_T pOctetList = (pOctet_List_T) attrVal; LPNDS_ASN1_TYPE_13 * lppNext = NULL; LPBYTE lpBuffer = NULL; LPNDS_ASN1_TYPE_13 pNextObj = NULL; lpBuffer = (LPBYTE)AllocADsMem(pOctetList->length); if (!lpBuffer) { RRETURN(E_OUTOFMEMORY); } memcpy(lpBuffer, pOctetList->data, pOctetList->length); pNdsObject->NdsValue.value_13.Length = pOctetList->length; pNdsObject->NdsValue.value_13.Data = lpBuffer; lppNext = &(pNdsObject->NdsValue.value_13.Next); while ( pOctetList->next != NULL ) { pOctetList = pOctetList->next; pNextObj = (LPNDS_ASN1_TYPE_13)AllocADsMem(sizeof(NDS_ASN1_TYPE_13)); if (!pNextObj) { // BUGBUG: need to clean up list
RRETURN(E_OUTOFMEMORY); } lpBuffer = (LPBYTE)AllocADsMem(pOctetList->length); memcpy(lpBuffer, pOctetList->data, pOctetList->length); pNextObj->Length = pOctetList->length; pNextObj->Data = lpBuffer; *lppNext = pNextObj; lppNext = &pNextObj->Next; } break; }
case 14: { pEMail_Address_T pEmailAddress = (pEMail_Address_T) attrVal;
pNdsObject->NdsValue.value_14.Type = pEmailAddress->type; pNdsObject->NdsValue.value_14.Address = (LPWSTR)AllocADsStr((LPWSTR) pEmailAddress->address); break; }
case 15: {
pPath_T pPath = (pPath_T) attrVal;
pNdsObject->NdsValue.value_15.Type = pPath->nameSpaceType; pNdsObject->NdsValue.value_15.VolumeName = (LPWSTR)AllocADsStr( (LPWSTR) pPath->volumeName); pNdsObject->NdsValue.value_15.Path = (LPWSTR)AllocADsStr( (LPWSTR) pPath->path);
if (!pNdsObject->NdsValue.value_15.Path) { RRETURN(E_OUTOFMEMORY); } break;
}
case 16: {
pReplica_Pointer_T pReplicaPtr = (pReplica_Pointer_T) attrVal; LPNDS_ASN1_TYPE_12 pNdsASN1_12 = NULL; DWORD iter = 0; pNdsObject->NdsValue.value_16.ServerName = (LPWSTR)AllocADsStr((LPWSTR) pReplicaPtr->serverName); pNdsObject->NdsValue.value_16.ReplicaType = pReplicaPtr->replicaType; pNdsObject->NdsValue.value_16.ReplicaNumber = pReplicaPtr->replicaNumber; pNdsObject->NdsValue.value_16.Count = pReplicaPtr->count; //
// NDS is kinda goofy. It stores one substructure as part of the
// containing data type instead of a pointer to the object.
//
pNdsASN1_12 = (LPNDS_ASN1_TYPE_12)AllocADsMem( pReplicaPtr->count * sizeof(NDS_ASN1_TYPE_12) ); if (!pNdsASN1_12) { RRETURN (E_OUTOFMEMORY); } pNdsObject->NdsValue.value_16.ReplicaAddressHints = pNdsASN1_12; for ( iter = 0; iter < pReplicaPtr->count; iter++ ) { hr = CopyNDSNetAddressToNDS12( pReplicaPtr->replicaAddressHint + iter, (pNdsASN1_12 + iter) ); BAIL_ON_FAILURE(hr); } break;
}
case 17: {
pObject_ACL_T pObjectACL = (pObject_ACL_T) attrVal;
pNdsObject->NdsValue.value_17.ProtectedAttrName = (LPWSTR)AllocADsStr((LPWSTR) pObjectACL->protectedAttrName); pNdsObject->NdsValue.value_17.SubjectName = (LPWSTR)AllocADsStr((LPWSTR) pObjectACL->subjectName); pNdsObject->NdsValue.value_17.Privileges = pObjectACL->privileges; break; }
case 18: {
LPWSTR *pPostalAddresses = (LPWSTR *) attrVal;
for (DWORD i = 0; i < 6; i++) {
pNdsObject->NdsValue.value_18.PostalAddress[i] = (LPWSTR)AllocADsStr((LPWSTR) pPostalAddresses[i]); } break; }
case 19: {
pNWDS_TimeStamp_T pTimeStamp = (pNWDS_TimeStamp_T) attrVal; pNdsObject->NdsValue.value_19.WholeSeconds = pTimeStamp->wholeSeconds; pNdsObject->NdsValue.value_19.EventID = pTimeStamp->eventID;
break; }
case 20:
pNdsObject->NdsValue.value_20.ClassName = AllocADsStr( (LPWSTR) attrVal); break;
case 21: {
pStream_T lpASN1_21 = (pStream_T) attrVal; //
// The Length value is supposedly always zero!!
//
pNdsObject->NdsValue.value_21.Length = lpASN1_21->length; pNdsObject->NdsValue.value_21.Data = NULL; break; }
case 22:
pNdsObject->NdsValue.value_22.Counter = *((DWORD *) attrVal); break;
case 23: {
pBack_Link_T pBackLink = (pBack_Link_T) attrVal; pNdsObject->NdsValue.value_23.RemoteID = pBackLink->remoteID; pNdsObject->NdsValue.value_23.ObjectName = (LPWSTR)AllocADsStr( (LPWSTR) pBackLink->objectName);
if (!pBackLink->objectName) { RRETURN (E_OUTOFMEMORY); } break; }
case 24:
pNdsObject->NdsValue.value_24.Time = *((DWORD *) attrVal); break;
case 25: {
pTyped_Name_T pTypedName = (pTyped_Name_T) attrVal; pNdsObject->NdsValue.value_25.ObjectName = (LPWSTR)AllocADsStr( (LPWSTR) pTypedName->objectName); pNdsObject->NdsValue.value_25.Level = pTypedName->level; pNdsObject->NdsValue.value_25.Interval = pTypedName->interval; break; }
case 26: {
pHold_T pHold = (pHold_T) attrVal; pNdsObject->NdsValue.value_26.ObjectName = (LPWSTR)AllocADsStr( (LPWSTR) pHold->objectName); pNdsObject->NdsValue.value_26.Amount = pHold->amount;
break; }
case 27:
pNdsObject->NdsValue.value_27.Interval = *((DWORD *) attrVal); break;
default:
//
// BugBug. Get the proper value from NDS
//
RRETURN(E_ADS_CANT_CONVERT_DATATYPE); break; }
error:
RRETURN (hr);
}
HRESULT CopyNdsObjectToNdsValue( PNDSOBJECT lpNdsObject, nptr *ppAttrVal, pnuint32 pluAttrValSize, pnuint32 pluSyntax ) {
HRESULT hr = S_OK;
if (!lpNdsObject || !ppAttrVal || !pluAttrValSize || !pluSyntax) { RRETURN(E_ADS_BAD_PARAMETER); }
*pluAttrValSize = 0; *ppAttrVal = NULL; *pluSyntax = lpNdsObject->NdsType;
switch (lpNdsObject->NdsType) { case 1:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_1.DNString ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_1.DNString ) + 1) * sizeof (WCHAR) ; break;
case 2:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_2.CaseExactString ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_2.CaseExactString ) + 1) * sizeof (WCHAR) ; break;
case 3:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_3.CaseIgnoreString ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_3.CaseIgnoreString ) + 1) * sizeof (WCHAR) ; break;
case 4:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_4.PrintableString ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_4.PrintableString ) + 1) * sizeof (WCHAR) ; break;
case 5:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_5.NumericString ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_5.NumericString ) + 1) * sizeof (WCHAR) ; break;
case 6: {
LPNDS_ASN1_TYPE_6 lpNdsTempASN1_6 = &(lpNdsObject->NdsValue.value_6); pCI_List_T pCaseIgnoreList = (pCI_List_T) AllocADsMem(sizeof(CI_List_T)); if (!pCaseIgnoreList) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*ppAttrVal = pCaseIgnoreList; *pluAttrValSize = sizeof(CI_List_T); pCaseIgnoreList->s = (pnchar8) AllocADsStr( lpNdsTempASN1_6->String ); if (!pCaseIgnoreList->s) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } while ( lpNdsTempASN1_6->Next) { pCaseIgnoreList->next = (pCI_List_T) AllocADsMem(sizeof(CI_List_T)); if (!pCaseIgnoreList->next) { // BUGBUG: need to clean up list
BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pCaseIgnoreList = pCaseIgnoreList->next; lpNdsTempASN1_6 = lpNdsTempASN1_6->Next; pCaseIgnoreList->s = (pnchar8) AllocADsStr( lpNdsTempASN1_6->String ); if (!pCaseIgnoreList) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } } pCaseIgnoreList->next = NULL; break; }
case 7: {
Boolean_T *pBool = (Boolean_T *) AllocADsMem(sizeof(Boolean_T)); if (!pBool) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*pBool = *((Boolean_T *) &lpNdsObject->NdsValue.value_7.Boolean); *ppAttrVal = pBool; *pluAttrValSize = sizeof(Boolean_T); break; }
case 8: {
Integer_T *pInteger = (Integer_T *) AllocADsMem(sizeof(Integer_T)); if (!pInteger) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*pInteger = *((Integer_T *) &lpNdsObject->NdsValue.value_8.Integer); *ppAttrVal = pInteger; *pluAttrValSize = sizeof(Integer_T); break; }
case 9: {
pOctet_String_T lpOctetString = (pOctet_String_T) AllocADsMem(sizeof(Octet_String_T));
if (!lpOctetString) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
if (lpNdsObject->NdsValue.value_9.Length) {
lpOctetString->length = lpNdsObject->NdsValue.value_9.Length;
lpOctetString->data = (LPBYTE) AllocADsMem ( lpNdsObject->NdsValue.value_9.Length); if (!lpOctetString->data) { RRETURN(E_OUTOFMEMORY); }
memcpy( lpOctetString->data, lpNdsObject->NdsValue.value_9.OctetString, lpNdsObject->NdsValue.value_9.Length ); } else { lpOctetString->length = 0; lpOctetString->data = NULL;
} *ppAttrVal = lpOctetString; *pluAttrValSize = sizeof(Octet_String_T); break; }
case 10:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_11.TelephoneNumber ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_11.TelephoneNumber ) + 1) * sizeof (WCHAR) ; break;
case 11: {
pFax_Number_T pFaxNumber = (pFax_Number_T) AllocADsMem(sizeof(Fax_Number_T)); pFaxNumber->telephoneNumber = (pnchar8)AllocADsStr( lpNdsObject->NdsValue.value_11.TelephoneNumber ); if (!pFaxNumber->telephoneNumber) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
pFaxNumber->parameters.numOfBits = lpNdsObject->NdsValue.value_11.NumberOfBits;
pFaxNumber->parameters.data = (LPBYTE) AllocADsMem((pFaxNumber->parameters.numOfBits+7) / 8);
memcpy( pFaxNumber->parameters.data, lpNdsObject->NdsValue.value_11.Parameters, (pFaxNumber->parameters.numOfBits+7) / 8 ); *ppAttrVal = pFaxNumber; *pluAttrValSize = sizeof(Fax_Number_T); break; }
case 12: {
pNet_Address_T pNetAddress = (pNet_Address_T) AllocADsMem(sizeof (Net_Address_T)); LPBYTE pBuffer = NULL; pNetAddress->addressType = lpNdsObject->NdsValue.value_12.AddressType; pNetAddress->addressLength = lpNdsObject->NdsValue.value_12.AddressLength; pBuffer = (LPBYTE)AllocADsMem(pNetAddress->addressLength); if (!pBuffer) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } memcpy( pBuffer, lpNdsObject->NdsValue.value_12.Address, pNetAddress->addressLength ); pNetAddress->address = pBuffer;
*ppAttrVal = pNetAddress; *pluAttrValSize = sizeof(Net_Address_T); break;
}
case 13: {
LPNDS_ASN1_TYPE_13 lpNdsTempASN1_13 = &(lpNdsObject->NdsValue.value_13); pOctet_List_T pOctetList = (pOctet_List_T) AllocADsMem(sizeof(Octet_List_T)); if (!pOctetList) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*ppAttrVal = pOctetList; *pluAttrValSize = sizeof(Octet_List_T); pOctetList->length = lpNdsTempASN1_13->Length;
pOctetList->data = (LPBYTE)AllocADsMem( lpNdsTempASN1_13->Length ); if (!pOctetList->data) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
memcpy( pOctetList->data, lpNdsTempASN1_13->Data, pOctetList->length );
while ( lpNdsTempASN1_13->Next) { pOctetList->next = (pOctet_List_T) AllocADsMem(sizeof(Octet_List_T)); if (!pOctetList->next) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pOctetList = pOctetList->next; lpNdsTempASN1_13 = lpNdsTempASN1_13->Next; pOctetList->length = lpNdsTempASN1_13->Length;
pOctetList->data = (LPBYTE) AllocADsMem( lpNdsTempASN1_13->Length ); if (!pOctetList->data) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
memcpy( pOctetList->data, lpNdsTempASN1_13->Data, pOctetList->length ); } pOctetList->next = NULL; break; }
case 14: {
pEMail_Address_T pEmailAddress = (pEMail_Address_T) AllocADsMem(sizeof (EMail_Address_T)); if (!pEmailAddress) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pEmailAddress->type = lpNdsObject->NdsValue.value_14.Type;
pEmailAddress->address = (pnchar8) AllocADsStr( (LPWSTR) lpNdsObject->NdsValue.value_14.Address);
*ppAttrVal = pEmailAddress; *pluAttrValSize = sizeof(EMail_Address_T); break; }
case 15: {
pPath_T pPath = (pPath_T) AllocADsMem(sizeof (Path_T)); if (!pPath) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pPath->nameSpaceType = lpNdsObject->NdsValue.value_15.Type; pPath->volumeName = (pnchar8) AllocADsStr( lpNdsObject->NdsValue.value_15.VolumeName); pPath->path = (pnchar8) AllocADsStr( (LPWSTR) lpNdsObject->NdsValue.value_15.Path);
*ppAttrVal = pPath; *pluAttrValSize = sizeof(Path_T); break; }
case 16: {
LPNDS_ASN1_TYPE_12 pNdsASN1_12 = NULL; DWORD dwSize = sizeof (Replica_Pointer_T) + (lpNdsObject->NdsValue.value_16.Count-1) * sizeof (Net_Address_T);
pReplica_Pointer_T pReplicaPointer = (pReplica_Pointer_T) AllocADsMem(dwSize);
if (!pReplicaPointer) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pReplicaPointer->serverName = (pnchar8) AllocADsStr( (LPWSTR) lpNdsObject->NdsValue.value_16.ServerName); pReplicaPointer->replicaType = lpNdsObject->NdsValue.value_16.ReplicaType; pReplicaPointer->replicaNumber = lpNdsObject->NdsValue.value_16.ReplicaNumber; pReplicaPointer->count = lpNdsObject->NdsValue.value_16.Count;
pNdsASN1_12 = lpNdsObject->NdsValue.value_16.ReplicaAddressHints;
for ( DWORD iter = 0; iter < pReplicaPointer->count; iter++ ) { hr = CopyNDS12ToNDSNetAddress( pNdsASN1_12 + iter, pReplicaPointer->replicaAddressHint + iter ); BAIL_ON_FAILURE(hr); } *ppAttrVal = pReplicaPointer; *pluAttrValSize = dwSize; break; }
case 17: {
pObject_ACL_T pObjectACL = (pObject_ACL_T) AllocADsMem(sizeof (Object_ACL_T)); if (!pObjectACL) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pObjectACL->protectedAttrName = (pnchar8) AllocADsStr( (LPWSTR) lpNdsObject->NdsValue.value_17.ProtectedAttrName);
pObjectACL->subjectName = (pnchar8) AllocADsStr( lpNdsObject->NdsValue.value_17.SubjectName);
pObjectACL->privileges = lpNdsObject->NdsValue.value_17.Privileges;
*ppAttrVal = pObjectACL; *pluAttrValSize = sizeof(Object_ACL_T); break; }
case 18: {
LPWSTR *pPostalAddresses = (LPWSTR *) AllocADsMem(sizeof (LPWSTR) * 6); if (!pPostalAddresses) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } for (DWORD i=0; i < 6; i++) { pPostalAddresses[i] = AllocADsStr( (LPWSTR) lpNdsObject->NdsValue.value_18.PostalAddress[i]); }
*ppAttrVal = pPostalAddresses; *pluAttrValSize = sizeof(LPWSTR) * 6; break; }
case 19: {
pNWDS_TimeStamp_T pTimeStamp = (pNWDS_TimeStamp_T) AllocADsMem(sizeof (NWDS_TimeStamp_T)); if (!pTimeStamp) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pTimeStamp->wholeSeconds = lpNdsObject->NdsValue.value_19.WholeSeconds; pTimeStamp->eventID = lpNdsObject->NdsValue.value_19.EventID;
*ppAttrVal = pTimeStamp; *pluAttrValSize = sizeof(NWDS_TimeStamp_T); break; }
case 20:
*ppAttrVal = AllocADsStr( lpNdsObject->NdsValue.value_20.ClassName ); *pluAttrValSize = (wcslen( lpNdsObject->NdsValue.value_20.ClassName ) + 1) * sizeof (WCHAR) ; break;
case 21:{
pStream_T pStream = (pStream_T) AllocADsMem(sizeof (NWDS_TimeStamp_T)); if (!pStream) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pStream->length = lpNdsObject->NdsValue.value_21.Length; pStream->data = NULL;
*ppAttrVal = pStream; *pluAttrValSize = sizeof(Stream_T); break; }
case 22: {
Counter_T *pCounter = (Counter_T *) AllocADsMem(sizeof(Counter_T)); if (!pCounter) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*pCounter = *((Counter_T *) &lpNdsObject->NdsValue.value_22.Counter); *ppAttrVal = pCounter; *pluAttrValSize = sizeof(Counter_T); break; }
case 23: {
pBack_Link_T pBackLink = (pBack_Link_T) AllocADsMem(sizeof (Back_Link_T)); if (!pBackLink) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pBackLink->remoteID = lpNdsObject->NdsValue.value_23.RemoteID;
pBackLink->objectName = (pnchar8) AllocADsStr( lpNdsObject->NdsValue.value_23.ObjectName);
*ppAttrVal = pBackLink; *pluAttrValSize = sizeof(Back_Link_T); break; }
case 24: {
Integer_T *pInteger = (Integer_T *) AllocADsMem(sizeof(Integer_T)); if (!pInteger) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*pInteger = *((Integer_T *) &lpNdsObject->NdsValue.value_24.Time); *ppAttrVal = pInteger; *pluAttrValSize = sizeof(Integer_T); break; }
case 25: {
pTyped_Name_T pTypedName = (pTyped_Name_T) AllocADsMem(sizeof (Typed_Name_T)); if (!pTypedName) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pTypedName->objectName = (pnchar8) AllocADsStr( lpNdsObject->NdsValue.value_25.ObjectName);
pTypedName->level = lpNdsObject->NdsValue.value_25.Level;
pTypedName->interval = lpNdsObject->NdsValue.value_25.Interval;
*ppAttrVal = pTypedName; *pluAttrValSize = sizeof(Typed_Name_T); break; }
case 26: {
pHold_T pHold = (pHold_T) AllocADsMem(sizeof (Hold_T)); if (!pHold) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); } pHold->objectName = (pnchar8) AllocADsStr( (LPWSTR) lpNdsObject->NdsValue.value_26.ObjectName);
pHold->amount = lpNdsObject->NdsValue.value_26.Amount;
*ppAttrVal = pHold; *pluAttrValSize = sizeof(Hold_T); break; }
case 27: {
nuint32 *pInterval = (nuint32 *) AllocADsMem(sizeof(nuint32)); if (!pInterval) { BAIL_ON_FAILURE(hr = E_OUTOFMEMORY); }
*pInterval = *((nuint32 *) &lpNdsObject->NdsValue.value_27.Interval); *ppAttrVal = pInterval; *pluAttrValSize = sizeof(nuint32); break; }
default:
//
// BugBug. Get the proper value from NDS
//
RRETURN(E_ADS_CANT_CONVERT_DATATYPE); break; }
RRETURN (hr);
error:
RRETURN(hr);
}
|