//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1995. // // File: nw2ods.cxx // // Contents: NDS Object to Variant Copy Routines // // Functions: // // History: 25-Apr-96 KrishnaG Created. // // // Issues: Check null ptrs for AllocADsMem and AllocADsStr // //---------------------------------------------------------------------------- #include "nwcompat.hxx" #pragma hdrstop HRESULT NTTypeToAdsTypeCopyString( PNTOBJECT lpNtSrcObject, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; lpAdsDestValue->dwType = ADSTYPE_CASE_IGNORE_STRING; lpAdsDestValue->DNString = AllocADsStr( lpNtSrcObject->NTValue.pszValue ); RRETURN(hr); } HRESULT NTTypeToAdsTypeCopyBoolean( PNTOBJECT lpNtSrcObject, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; lpAdsDestValue->dwType = ADSTYPE_BOOLEAN; lpAdsDestValue->Boolean = lpNtSrcObject->NTValue.fValue; RRETURN(hr); } HRESULT NTTypeToAdsTypeCopyInteger( PNTOBJECT lpNtSrcObject, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; lpAdsDestValue->dwType = ADSTYPE_INTEGER; lpAdsDestValue->Integer = lpNtSrcObject->NTValue.dwValue; RRETURN(hr); } HRESULT NTTypeToAdsTypeCopyOctetString( PNTOBJECT lpNtSrcObject, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; DWORD dwLength = 0; LPBYTE lpByte = NULL; // sanity check the pointers if(!lpAdsDestValue){ RRETURN(E_POINTER); } if(!lpNtSrcObject){ RRETURN(E_POINTER); } lpAdsDestValue->dwType = ADSTYPE_OCTET_STRING; dwLength = lpNtSrcObject->NTValue.octetstring.dwSize; if (dwLength) { lpByte = (LPBYTE)AllocADsMem(dwLength); if (!lpByte) { hr = E_OUTOFMEMORY; BAIL_ON_FAILURE(hr); } if (lpNtSrcObject->NTValue.octetstring.pByte) { memcpy(lpByte, lpNtSrcObject->NTValue.octetstring.pByte, dwLength); } lpAdsDestValue->OctetString.dwLength = dwLength; lpAdsDestValue->OctetString.lpValue = lpByte; } else { lpAdsDestValue->OctetString.dwLength = 0; lpAdsDestValue->OctetString.lpValue = NULL; } error: RRETURN(hr); } HRESULT NTTypeToAdsTypeCopyNW312Date( PNTOBJECT pNTSrcValue, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; // sanity check the pointers if(!lpAdsDestValue){ RRETURN(E_POINTER); } if(!pNTSrcValue){ RRETURN(E_POINTER); } lpAdsDestValue->dwType = ADSTYPE_UTC_TIME; hr = ConvertNW312DateToSYSTEMTIME( pNTSrcValue->NTValue.Nw312Date, static_cast(&lpAdsDestValue->UTCTime) ); BAIL_ON_FAILURE(hr); error: RRETURN(hr); } HRESULT NTTypeToAdsTypeCopyDATE( PNTOBJECT pNTSrcValue, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; SYSTEMTIME stSystemTime; // sanity check the pointers if(!lpAdsDestValue){ RRETURN(E_POINTER); } if(!pNTSrcValue){ RRETURN(E_POINTER); } GetSystemTime( &stSystemTime); // The date is a DWORD containing the number of minutes elapsed // since 12:00 AM GMT. We get the current system time for the // current date. Current date + DWORD time = the date relative // to today. stSystemTime.wHour = (WORD)(pNTSrcValue->NTValue.dwValue)/60; stSystemTime.wMinute = (WORD)(pNTSrcValue->NTValue.dwValue)%60; stSystemTime.wSecond =0; stSystemTime.wMilliseconds = 0; lpAdsDestValue->dwType = ADSTYPE_UTC_TIME; lpAdsDestValue->UTCTime = static_cast(stSystemTime); RRETURN(hr); } #if 0 // We never seem to actually get a NT_SYNTAX_ID_SYSTEMTIME. // This code is untested as a result. HRESULT NTTypeToAdsTypeCopySYSTEMTIME( PNTOBJECT pNTSrcValue, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; if(!pNTSrcValue){ RRETURN(E_POINTER); } if(!lpAdsDestValue){ RRETURN(E_POINTER); } lpAdsDestValue->dwType = ADSTYPE_UTC_TIME; lpAdsDestValue->UTCTime = static_cast (pNTSrcValue->NTValue.stSystemTimeValue); RRETURN(hr); } #endif HRESULT NTTypeToAdsTypeCopy( PNTOBJECT lpNtSrcObject, PADSVALUE lpAdsDestValue ) { HRESULT hr = S_OK; switch (lpNtSrcObject->NTType) { case NT_SYNTAX_ID_BOOL: hr = NTTypeToAdsTypeCopyBoolean( lpNtSrcObject, lpAdsDestValue ); break; case NT_SYNTAX_ID_DWORD: hr = NTTypeToAdsTypeCopyInteger( lpNtSrcObject, lpAdsDestValue ); break; case NT_SYNTAX_ID_LPTSTR: hr = NTTypeToAdsTypeCopyString( lpNtSrcObject, lpAdsDestValue ); break; /* case NT_SYNTAX_ID_SYSTEMTIME: hr = NTTypeToAdsTypeCopySYSTEMTIME( lpNtSrcObject, lpAdsDestValue ); break; case NT_SYNTAX_ID_NulledString: hr = NTTypeToAdsTypeCopyNDSSynId5( lpNtSrcObject, lpAdsDestValue ); break; case NT_SYNTAX_ID_DelimitedString: hr = NTTypeToAdsTypeCopyNDSSynId6( lpNtSrcObject, lpAdsDestValue ); break; */ case NT_SYNTAX_ID_DATE: hr = NTTypeToAdsTypeCopyDATE( lpNtSrcObject, lpAdsDestValue ); break; case NT_SYNTAX_ID_NW312DATE: hr = NTTypeToAdsTypeCopyNW312Date( lpNtSrcObject, lpAdsDestValue ); break; case NT_SYNTAX_ID_OCTETSTRING: hr = NTTypeToAdsTypeCopyOctetString( lpNtSrcObject, lpAdsDestValue ); break; default: hr = E_FAIL; break; } RRETURN(hr); } HRESULT NTTypeToAdsTypeCopyConstruct( LPNTOBJECT pNtSrcObjects, DWORD dwNumObjects, LPADSVALUE * ppAdsDestValues ) { DWORD i = 0; LPADSVALUE pAdsDestValues = NULL; HRESULT hr = S_OK; if (!dwNumObjects) { *ppAdsDestValues =0; RRETURN(S_OK); } pAdsDestValues = (LPADSVALUE)AllocADsMem( dwNumObjects * sizeof(ADSVALUE) ); if (!pAdsDestValues) { RRETURN(E_OUTOFMEMORY); } for (i = 0; i < dwNumObjects; i++ ) { hr = NTTypeToAdsTypeCopy( pNtSrcObjects + i, pAdsDestValues + i ); BAIL_ON_FAILURE(hr); } *ppAdsDestValues = pAdsDestValues; RRETURN(S_OK); error: if (pAdsDestValues) { AdsFreeAdsValues( pAdsDestValues, dwNumObjects ); FreeADsMem(pAdsDestValues); } *ppAdsDestValues = NULL; RRETURN(hr); }