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