|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: var2winnt.cxx
//
// Contents:
//
// Functions:
//
// History: 13-June-1996 RamV Created.
//
//
// Issues: Check null ptrs for AllocADsMem and AllocADsStr
//
//----------------------------------------------------------------------------
#include "winnt.hxx"
#pragma hdrstop
#define INITGUID
//
// 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){
(pNTDestValue->NTValue).dwValue = (DWORD)lpVarSrcObject->lVal; } else if (lpVarSrcObject->vt == VT_I2) {
(pNTDestValue->NTValue).dwValue = (DWORD)lpVarSrcObject->iVal; } else { RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_DWORD;
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 VarTypeToWinNTTypeCopyDATE70( PVARIANT lpVarSrcObject, PNTOBJECT pNTDestValue ) { HRESULT hr = S_OK; SYSTEMTIME stTime; DWORD dwSeconds1970 = 0;
if(lpVarSrcObject->vt != VT_DATE){ RRETURN(hr = E_ADS_CANT_CONVERT_DATATYPE); }
pNTDestValue->NTType = NT_SYNTAX_ID_DATE_1970;
hr = ConvertDATEtoDWORD( lpVarSrcObject->date, &dwSeconds1970 ); BAIL_ON_FAILURE(hr);
(pNTDestValue->NTValue).dwSeconds1970 = dwSeconds1970 ;
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 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 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_DATE_1970: hr = VarTypeToWinNTTypeCopyDATE70( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_LPTSTR: hr = VarTypeToWinNTTypeCopyLPTSTR( lpVarSrcObject, lpNtDestObject ); break;
case NT_SYNTAX_ID_DelimitedString: hr = VarTypeToWinNTTypeCopyLPTSTR( lpVarSrcObject, lpNtDestObject );
lpNtDestObject->NTType = NT_SYNTAX_ID_DelimitedString; break;
case NT_SYNTAX_ID_NulledString: hr = VarTypeToWinNTTypeCopyLPTSTR( lpVarSrcObject, lpNtDestObject ); lpNtDestObject->NTType = NT_SYNTAX_ID_NulledString; break;
case NT_SYNTAX_ID_OCTETSTRING: hr = VarTypeToWinNTTypeCopyOctetString( lpVarSrcObject, lpNtDestObject ); lpNtDestObject->NTType = NT_SYNTAX_ID_OCTETSTRING; 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); }
|