|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: var2nw.cxx
//
// Contents:
//
// Functions:
//
// History: 13-June-1996 KrishnaG Created.
//
//
//
//----------------------------------------------------------------------------
#include "nwcompat.hxx"
#pragma hdrstop
//
// WinNT objects copy code
//
HRESULT VarTypeToWinNTTypeCopyBOOL( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
if(!lpVarSrcObject){ RRETURN(E_POINTER); }
if(lpVarSrcObject->vt != VT_BOOL){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_BOOL;
if(lpVarSrcObject->boolVal){ (pNTDestValue->NTValue).fValue = TRUE;
} else { (pNTDestValue->NTValue).fValue = FALSE; }
RRETURN(hr); }
HRESULT VarTypeToWinNTTypeCopySYSTEMTIME( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
if(!lpVarSrcObject){ RRETURN(E_POINTER); }
if(lpVarSrcObject->vt != VT_DATE){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
hr = ConvertDATEToSYSTEMTIME(lpVarSrcObject->date, &(pNTDestValue->NTValue.stSystemTimeValue) );
RRETURN( hr ); }
HRESULT VarTypeToWinNTTypeCopyDWORD( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_I4){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_DWORD;
(pNTDestValue->NTValue).dwValue = (DWORD)lpVarSrcObject->lVal; RRETURN(hr);
}
HRESULT VarTypeToWinNTTypeCopyDATE( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK; SYSTEMTIME stTime;
if(lpVarSrcObject->vt != VT_DATE){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_DATE;
//
// Note carefully! date is supplied as a value which is < 1 however
// VariantTimeToDosDateTime complains when given a value < 30000.
// (Number of days between 1900 and 1980). So
// we add 35000 to make it a legal value.
//
hr = ConvertDATEToSYSTEMTIME(lpVarSrcObject->date+ 35000, &stTime);
BAIL_ON_FAILURE(hr);
(pNTDestValue->NTValue).dwValue = stTime.wHour*60 + stTime.wMinute ;
error: RRETURN(hr);
}
HRESULT VarTypeToWinNTTypeCopyNW312DATE( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK; SYSTEMTIME stTime;
if(lpVarSrcObject->vt != VT_DATE){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_NW312DATE;
hr = ConvertVariantToNW312Date( lpVarSrcObject->date, pNTDestValue->NTValue.Nw312Date ); BAIL_ON_FAILURE(hr);
error: RRETURN(hr);
}
HRESULT VarTypeToWinNTTypeCopyLPTSTR( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
if(lpVarSrcObject->vt != VT_BSTR){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_LPTSTR;
(pNTDestValue->NTValue).pszValue = AllocADsStr(lpVarSrcObject->bstrVal);
if(!(pNTDestValue->NTValue).pszValue){ hr = E_OUTOFMEMORY; }
RRETURN(hr); }
HRESULT VarTypeToWinNTTypeCopyDelimitedString( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
if (!(V_VT(lpVarSrcObject) == (VT_VARIANT|VT_ARRAY))) { RRETURN(E_FAIL); }
pNTDestValue->NTType = NT_SYNTAX_ID_DelimitedString;
hr = VariantToDelimitedString(*lpVarSrcObject, &((pNTDestValue->NTValue).pszValue), TEXT(','));
RRETURN(hr); }
HRESULT VarTypeToWinNTTypeCopyOctetString( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
pNTDestValue->NTType = NT_SYNTAX_ID_OCTETSTRING; hr = VariantToBinary( lpVarSrcObject, &(pNTDestValue->NTValue).octetstring.dwSize, &(pNTDestValue->NTValue).octetstring.pByte);
RRETURN(hr); }
HRESULT VarTypeToWinNTTypeCopyNulledString( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK;
if(!(V_VT(lpVarSrcObject) == (VT_VARIANT|VT_ARRAY))) { RRETURN(E_FAIL); }
pNTDestValue->NTType = NT_SYNTAX_ID_NulledString;
hr = VariantToNulledString(*lpVarSrcObject, &((pNTDestValue->NTValue).pszValue) );
RRETURN(hr); }
HRESULT VarTypeToNtTypeCopy( DWORD dwNtType, PVARIANT lpVarSrcObject, PNTOBJECT lpNtDestObject ) { HRESULT hr = S_OK; switch (dwNtType){ case NT_SYNTAX_ID_BOOL: hr = VarTypeToWinNTTypeCopyBOOL( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_SYSTEMTIME: hr = VarTypeToWinNTTypeCopySYSTEMTIME( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_DWORD: hr = VarTypeToWinNTTypeCopyDWORD( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_DATE: hr = VarTypeToWinNTTypeCopyDATE( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_NW312DATE: hr = VarTypeToWinNTTypeCopyNW312DATE( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_LPTSTR: hr = VarTypeToWinNTTypeCopyLPTSTR( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_DelimitedString: hr = VarTypeToWinNTTypeCopyDelimitedString( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_NulledString: hr = VarTypeToWinNTTypeCopyNulledString( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_OCTETSTRING: hr = VarTypeToWinNTTypeCopyOctetString( lpVarSrcObject, lpNtDestObject ); break;
default: hr = E_FAIL; break; }
RRETURN(hr); }
HRESULT VarTypeToNtTypeCopyConstruct( DWORD dwNtType, LPVARIANT pVarSrcObjects, DWORD dwNumObjects, LPNTOBJECT * ppNtDestObjects ) {
DWORD i = 0; LPNTOBJECT pNtDestObjects = NULL; HRESULT hr = S_OK;
pNtDestObjects = (LPNTOBJECT)AllocADsMem( dwNumObjects * sizeof(NTOBJECT) );
if (!pNtDestObjects) { RRETURN(E_FAIL); }
for (i = 0; i < dwNumObjects; i++ ) {
hr = VarTypeToNtTypeCopy( dwNtType, pVarSrcObjects + i, pNtDestObjects + i );
BAIL_ON_FAILURE(hr); }
*ppNtDestObjects = pNtDestObjects;
RRETURN(S_OK);
error:
if (pNtDestObjects) {
FreeADsMem(pNtDestObjects); }
*ppNtDestObjects = NULL;
RRETURN(hr); }
|