Export (0) Print
Expand All

4.1.10.5.1 TransformInput

procedure TransformInput(
  hDrs: DRS_HANDLE,
  requestVersion: DWORD,
  requestUnion: DRS_MSG_GETCHGREQ,
  var nativeRequest: DRS_MSG_GETCHGREQ_V10,
  pdwOutVersion: ADDRESS OF DWORD,
  var responseSmtpAddress: unicodestring): ULONG

Informative summary of behavior: The TransformInput procedure transforms the received request message into a V10 request, which is a superset of the supported request messages.

optionalFeatures: sequence of msDS-OptionalFeature objects /* [MS-ADSC] */
extClient: DRS_EXTENSIONS_INT
extServer: DRS_EXTENSIONS_INT
optionalFeatureBit: integer

extClient := ClientExtensions(hDrs)
responseSmtpAddress := null

if requestVersion < dc.minimumGetChangesRequestVersion 
    return ERROR_REVISION_MISMATCH

if requestVersion = 10
  /* Windows Server 2008 R2 RPC request. */
  nativeRequest := requestUnion.V10
  if not DRS_EXT_GETCHGREPLY_V6 in extClient.dwFlags then
    return ERROR_REVISION_MISMATCH
  else
    pdwOutVersion^ := 6
  endif

else if requestVersion = 8
  /* Windows Server 2003 RPC request. */
  nativeRequest := requestUnion.V8
  nativeRequest.ulMoreFlags := 0
  if not DRS_EXT_GETCHGREPLY_V6 in extClient.dwFlags then
    return ERROR_REVISION_MISMATCH
  else
    pdwOutVersion^ := 6
  endif

else if requestVersion = 7 then
  /* Windows Server 2003 SMTP request. */
  responseSmtpAddress := requestUnion.V7.pmtxReturnAddress^.mtx_name
  nativeRequest := requestUnion.V7.V3
  nativeRequest.pUpToDateVecDest :=
      requestUnion.V7.V3.pUpToDateVecDestV1
  nativeRequest.pPartialAttrSet := requestUnion.V7.pPartialAttrSet
  nativeRequest.pPartialAttrSetEx :=
      requestUnion.V7.pPartialAttrSetEx
  nativeRequest.PrefixTableDest := requestUnion.V7.PrefixTableDest
  nativeRequest.ulMoreFlags := 0
  if not DRS_EXT_GETCHGREPLY_V6 in extClient.dwFlags then
    return ERROR_REVISION_MISMATCH
  else
    pdwOutVersion^ := 6
  endif

else if requestVersion = 5 then
  /* Windows 2000 RPC request. */
  nativeRequest := requestUnion.V5
  nativeRequest.pUpToDateVecDest := 
      requestUnion.V5.pUpToDateVecDestV1
  nativeRequest.pPartialAttrSetEx := null
  nativeRequest.PrefixTableDest :=
      ConcretePTFromAbstractPT(dc.prefixTable)
  nativeRequest.ulMoreFlags := 0
  if ({DRS_WRIT_REP} ∩ requestUnion.V5.ulFlags) = null then
    nativeRequest.pPartialAttrSet := GCPAS()
  endif
  pdwOutVersion^ := 1

else if requestVersion = 4 then
  /* Windows 2000 SMTP request. */
  responseSmtpAddress := requestUnion.V4.pmtxReturnAddress^.mtx_name
  nativeRequest := requestUnion.V4.V3
  nativeRequest.pUpToDateVecDest :=
      requestUnion.V4.V3.pUpToDateVecDestV1
  if ({DRS_WRIT_REP} ∩ requestUnion.V4.V3.ulFlags) = null then
    nativeRequest.pPartialAttrSet := GCPAS()
  endif
  nativeRequest.pPartialAttrSetEx := null
  nativeRequest.ulMoreFlags := 0
  pdwOutVersion^ := 1
else
  /* Unsupported request. */
  return ERROR_REVISION_MISMATCH
endif

if ({DRS_WRIT_REP} ∩ nativeRequest.ulFlags) ≠ null then
  nativeRequest.ulFlags := 
      nativeRequest.ulFlags + {DRS_GET_ALL_GROUP_MEMBERSHIP}
endif

if (responseSmtpAddress = null) ≠ (not DRS_MAIL_REP in
    nativeRequest.ulFlags) then
  return ERROR_INVALID_PARAMETER
endif

extServer := ServerExtensions(hDrs)
optionalFeatures := list of msDS-OptionalFeature objects from the
                    Optional Features container /* [MS-ADTS] section 6.1.1.2.4.1.3 */

foreach feature in optionalFeatures
    if (GetOptionalFeatureBit(feature!msDS-OptionalFeatureGUID, optionalFeatureBit))
        if (optionalFeatureBit in extServer.dwFlagsEx) and
          optionalFeatureBit not in extClient.dwExtCaps then
            /* Feature is enabled on the server but the client
               is not capable of supporting it */
            return ERROR_REVISION_MISMATCH
        endif
    endif
    /* NOTE: The behavior of the server is undefined if */
    /* procedure GetOptionalFeatureBit() returns false. */
endfor
return 0
 
Show:
© 2014 Microsoft