HalpCopyDebugDescriptor

_DEBUG_DEVICE_DESCRIPTOR *__stdcall HalpCopyDebugDescriptor(_DEBUG_DEVICE_DESCRIPTOR *DebugDescriptor){
  UINT64 v3; 
  size_t v4; 
  PSTR v5; 
  PSTR v6; 

  if( !DebugDescriptor )
    return 0i64;
  v3 = DebugDescriptor->OemDataLength + DebugDescriptor->NameSpacePathLength + 248;
  v4 = v3;
  v5 = LoaderBlock ? HalpMmAllocateMemoryInternal(v3, MmCached) : (PSTR)ExAllocatePoolWithTag(
                                                                          1ui64,
                                                                          (unsigned int)v3,
                                                                          543973704i64);
  v6 = v5;
  if( !v5 )
    return 0i64;
  memset(v5, 0i64, v4);
  *(_OWORD *)v6 = *(_OWORD *)&DebugDescriptor->Bus;
  *((_OWORD *)v6 + 1) = *(_OWORD *)&DebugDescriptor->ProgIf;
  *((_OWORD *)v6 + 2) = *(_OWORD *)&DebugDescriptor->BaseAddress[0].TranslatedAddress;
  *((_OWORD *)v6 + 3) = *(_OWORD *)&DebugDescriptor->BaseAddress[1].Type;
  *((_OWORD *)v6 + 4) = *(_OWORD *)&DebugDescriptor->BaseAddress[1].Length;
  *((_OWORD *)v6 + 5) = *(_OWORD *)&DebugDescriptor->BaseAddress[2].TranslatedAddress;
  *((_OWORD *)v6 + 6) = *(_OWORD *)&DebugDescriptor->BaseAddress[3].Type;
  *((_OWORD *)v6 + 7) = *(_OWORD *)&DebugDescriptor->BaseAddress[3].Length;
  *((_OWORD *)v6 + 8) = *(_OWORD *)&DebugDescriptor->BaseAddress[4].TranslatedAddress;
  *((_OWORD *)v6 + 9) = *(_OWORD *)&DebugDescriptor->BaseAddress[5].Type;
  *((_OWORD *)v6 + 10) = *(_OWORD *)&DebugDescriptor->BaseAddress[5].Length;
  *((_OWORD *)v6 + 11) = *(_OWORD *)&DebugDescriptor->Memory.MaxEnd.anonymous_0.LowPart;
  *((_OWORD *)v6 + 12) = *(_OWORD *)&DebugDescriptor->Memory.Length;
  *((_OWORD *)v6 + 13) = *(_OWORD *)&DebugDescriptor->OemData;
  *((_OWORD *)v6 + 14) = *(_OWORD *)&DebugDescriptor->NameSpacePath;
  *((_QWORD *)v6 + 30) = DebugDescriptor->TransportData;
  *((_QWORD *)v6 + 26) = v6 + 248;
  *((_QWORD *)v6 + 28) = &v6[DebugDescriptor->OemDataLength + 248];
  memmove(v6 + 248, DebugDescriptor->OemData, DebugDescriptor->OemDataLength);
  memmove(*((VOID **)v6 + 28), DebugDescriptor->NameSpacePath, DebugDescriptor->NameSpacePathLength);
  return(_DEBUG_DEVICE_DESCRIPTOR *)v6;
}

Referenced by:

HalpDbgInitSystem