Share via


4.1.4.3 Server Behavior of the IDL_DRSCrackNames Method

Informative summary of behavior: The IDL_DRSCrackNames method is a generic method that is used to look up information in the directory. The most common usage is looking up directory object names that are provided in one format (for example, SPNs) and returning them in a different format (for example, DNs). One special mode occurs when the input format is not specified, in which case the server tries to "guess" the format of the name by following some heuristics. The method can also be used to look up generic information in the directory, such as the list of sites or the list of servers in a specific site.

 ULONG
 IDL_DRSCrackNames(
     [in, ref] DRS_HANDLE hDrs,
     [in] DWORD dwInVersion,
     [in, ref, switch_is(dwInVersion)] DRS_MSG_CRACKREQ *pmsgIn,
     [out, ref] DWORD *pdwOutVersion,
     [out, ref, switch_is(*pdwOutVersion)]
         DRS_MSG_CRACKREPLY *pmsgOut)
  
 msgIn: DRS_MSG_CRACKREQ_V1
 msgOut: DS_NAME_RESULTW
 ULONG result
  
  
 ValidateDRSInput(hDrs, 12)
  
 pdwOutVersion^ := 1
 pmsgOut^.V1.pResult^.cItems := 0
 pmsgOut^.V1.pResult^.rItems := null
 if dwInVersion ≠ 1 then
   return ERROR_INVALID_PARAMETER
 endif
 msgIn := pmsgIn^.V1
 if DS_NAME_FLAG_GCVERIFY in msgIn.dwFlags and
    not IsGC() then
   return ERROR_DS_GCVERIFY_ERROR
 endif
  
 /* Enable FPO resolution for non-DC callers. */
 if ClientUUID(hDrs) = NTDSAPI_CLIENT_GUID then
   msgIn.dwFlags := msgIn.dwFlags + {DS_NAME_FLAG_PRIVATE_RESOLVE_FPOS}
 endif
  
 result = CrackNames(pmsgIn^.V1, ADR(msgOut))
 if(result = ERROR_SUCCESS) then
    pmsgOut^.V1.pResult := ADR(msgOut)
 endif
 return result