text: //+---------------------------------------------------------------------------
  //
  //  Microsoft Windows
  //  Copyright (C) Microsoft Corporation, 1996 - 1997.
  //
  //  File:       IIScopy.cxx
  //
  //  Contents:   IIS Object Copy Routines
  //
  //  Functions:
  //
  //  History:    01-Mar-97   SophiaC   Created.
  //
  //  Issues:     Check null ptrs for AllocADsMem and AllocADsStr
  //
  //
  //----------------------------------------------------------------------------
  #include "iis.hxx"
  
  //
  // IISType objects copy code
  //
  
  HRESULT
  IISTypeCopyIISSynIdDWORD(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  {
      HRESULT hr = S_OK;
  
      lpIISDestObject->IISType = lpIISSrcObject->IISType;
  
      lpIISDestObject->IISValue.value_1.dwDWORD =
                                  lpIISSrcObject->IISValue.value_1.dwDWORD;
      RRETURN(hr);
  }
  
  HRESULT
  IISTypeCopyIISSynIdSTRING(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  {
      HRESULT hr = S_OK;
  
      lpIISDestObject->IISType = lpIISSrcObject->IISType;
  
      lpIISDestObject->IISValue.value_2.String =
                      (LPWSTR)AllocADsStr(
                              lpIISSrcObject->IISValue.value_2.String
                              );
  
      RRETURN(hr);
  }
  
  
  HRESULT
  IISTypeCopyIISSynIdEXPANDSZ(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  
  {
      HRESULT hr = S_OK;
  
      lpIISDestObject->IISType = lpIISSrcObject->IISType;
  
      lpIISDestObject->IISValue.value_3.ExpandSz =
                      (LPWSTR)AllocADsStr(
                              lpIISSrcObject->IISValue.value_3.ExpandSz
                              );
      RRETURN(hr);
  }
  
  
  HRESULT
  IISTypeCopyIISSynIdMULTISZ(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  {
      HRESULT hr = S_OK;
  
      lpIISDestObject->IISType = lpIISSrcObject->IISType;
  
      lpIISDestObject->IISValue.value_4.MultiSz =
                       (LPWSTR)AllocADsStr(
                                  lpIISSrcObject->IISValue.value_4.MultiSz
                                  );
  
      RRETURN(hr);
  }
  
  
  HRESULT
  IISTypeCopyIISSynIdBINARY(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  {
      HRESULT hr = S_OK;
      DWORD Length = 0;
      LPBYTE pBuffer = NULL;
  
      lpIISDestObject->IISType = lpIISSrcObject->IISType;
       
      Length = lpIISSrcObject->IISValue.value_5.Length;
      lpIISDestObject->IISValue.value_5.Length = Length;
  
      if (Length) {
          pBuffer = (LPBYTE)AllocADsMem(Length);
          if (!pBuffer) {
              RRETURN(S_FALSE);
          }
          memcpy(pBuffer, lpIISSrcObject->IISValue.value_5.Binary, Length);
      }
  
      lpIISDestObject->IISValue.value_5.Binary = pBuffer;
  
      RRETURN(hr);
  }
  
  
  HRESULT
  IISTypeCopyIISSynIdMIMEMAP(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  {
      HRESULT hr = S_OK;
  
      lpIISDestObject->IISType = lpIISSrcObject->IISType;
  
      lpIISDestObject->IISValue.value_6.MimeMap =
                       (LPWSTR)AllocADsStr(
                                  lpIISSrcObject->IISValue.value_4.MultiSz
                                  );
  
      RRETURN(hr);
  }
  
  HRESULT
  IISTypeCopy(
      PIISOBJECT lpIISSrcObject,
      PIISOBJECT lpIISDestObject
      )
  {
      HRESULT hr = S_OK;
      switch (lpIISSrcObject->IISType) {
      case IIS_SYNTAX_ID_DWORD:
          hr = IISTypeCopyIISSynIdDWORD(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      case IIS_SYNTAX_ID_STRING:
          hr = IISTypeCopyIISSynIdSTRING(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      case IIS_SYNTAX_ID_EXPANDSZ:
          hr = IISTypeCopyIISSynIdEXPANDSZ(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      case IIS_SYNTAX_ID_MULTISZ:
          hr = IISTypeCopyIISSynIdMULTISZ(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      case IIS_SYNTAX_ID_BINARY:
      case IIS_SYNTAX_ID_NTACL:
      case IIS_SYNTAX_ID_IPSECLIST:
          hr = IISTypeCopyIISSynIdBINARY(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      case IIS_SYNTAX_ID_MIMEMAP:
          hr = IISTypeCopyIISSynIdMIMEMAP(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      case IIS_SYNTAX_ID_BOOL:
      case IIS_SYNTAX_ID_BOOL_BITMASK:
          hr = IISTypeCopyIISSynIdDWORD(
                  lpIISSrcObject,
                  lpIISDestObject
                  );
          break;
  
      default:
          hr = E_FAIL;
          break;
      }
  
      RRETURN(hr);
  }
  
  
  
  HRESULT
  IISTypeCopyConstruct(
      LPIISOBJECT pIISSrcObjects,
      DWORD dwNumObjects,
      LPIISOBJECT * ppIISDestObjects
      )
  {
  
      DWORD i = 0;
      LPIISOBJECT pIISDestObjects = NULL;
      HRESULT hr = S_OK;
      DWORD dwNumObj;
  
  
      if (pIISSrcObjects->IISType == IIS_SYNTAX_ID_BINARY    ||
          pIISSrcObjects->IISType == IIS_SYNTAX_ID_IPSECLIST ||
          pIISSrcObjects->IISType == IIS_SYNTAX_ID_NTACL) {
          dwNumObj = 1;
      }
      else {
          dwNumObj = dwNumObjects;
      }
  
      pIISDestObjects = (LPIISOBJECT)AllocADsMem(
                                      dwNumObj * sizeof(IISOBJECT)
                                      );
  
      if (!pIISDestObjects) {
          RRETURN(E_FAIL);
      }
  
       for (i = 0; i < dwNumObj; i++ ) {
           hr = IISTypeCopy(pIISSrcObjects + i, pIISDestObjects + i);
       }
  
       *ppIISDestObjects = pIISDestObjects;
  
       RRETURN(S_OK);
  
  }
  
  
  