HalpRegisterDeviceInUse
NTSTATUS __stdcall HalpRegisterDeviceInUse(DEBUG_DEVICE_DESCRIPTOR *Device){
KD_NAMESPACE_ENUM NameSpace;
unsigned int v4;
void *Memory;
__int64 v6;
__int64 *v7;
NameSpace = Device->NameSpace;
if( NameSpace != KdNameSpaceNone )
{
if( (unsigned int)NameSpace > KdNameSpaceACPI )
return -1073741811;
if( !HalpFindDevice((__int64)Device) )
{
v4 = Device->NameSpacePathLength + 2;
if( HalpMmLoaderBlock )
Memory = HalpMmAllocateMemory(Device->NameSpacePathLength + 274);
else
Memory = ExAllocatePoolWithTag(PagedPool, Device->NameSpacePathLength + 274, 0x206C6148ui64);
v6 = (__int64)Memory;
if( !Memory )
return -1073741670;
memset((INT64)Memory, 0i64);
*(_QWORD *)(v6 + 16) = v6 + 24;
*(_OWORD *)(v6 + 24) = *(_OWORD *)&Device->Bus;
*(_OWORD *)(v6 + 40) = *(_OWORD *)&Device->ProgIf;
*(_OWORD *)(v6 + 56) = *(_OWORD *)&Device->BaseAddress[0].TranslatedAddress;
*(_OWORD *)(v6 + 72) = *(_OWORD *)&Device->BaseAddress[1].Type;
*(_OWORD *)(v6 + 88) = *(_OWORD *)&Device->BaseAddress[1].Length;
*(_OWORD *)(v6 + 104) = *(_OWORD *)&Device->BaseAddress[2].TranslatedAddress;
*(_OWORD *)(v6 + 120) = *(_OWORD *)&Device->BaseAddress[3].Type;
*(_OWORD *)(v6 + 136) = *(_OWORD *)&Device->BaseAddress[3].Length;
*(_OWORD *)(v6 + 152) = *(_OWORD *)&Device->BaseAddress[4].TranslatedAddress;
*(_OWORD *)(v6 + 168) = *(_OWORD *)&Device->BaseAddress[5].Type;
*(_OWORD *)(v6 + 184) = *(_OWORD *)&Device->BaseAddress[5].Length;
*(_OWORD *)(v6 + 200) = *(_OWORD *)&Device->Memory.MaxEnd.LowPart;
*(_OWORD *)(v6 + 216) = *(_OWORD *)&Device->Memory.Length;
*(_OWORD *)(v6 + 232) = *(_OWORD *)&Device->OemData;
*(_OWORD *)(v6 + 248) = *(_OWORD *)&Device->NameSpacePath;
*(_DEBUG_TRANSPORT_DATA *)(v6 + 264) = Device->TransportData;
if( Device->NameSpace == KdNameSpaceACPI && Device->NameSpacePath )
{
*(_QWORD *)(*(_QWORD *)(v6 + 16) + 224i64) = *(_QWORD *)(v6 + 16) + 248i64;
wcscpy_s(*(PWCHAR *)(*(_QWORD *)(v6 + 16) + 224i64), (unsigned __int64)v4 >> 1, Device->NameSpacePath);
}
v7 = (__int64 *)qword_140C48AD0;
if( *(__int64 **)qword_140C48AD0 != &qword_140C48AC8 )
__fastfail(3u);
*(_QWORD *)v6 = &qword_140C48AC8;
*(_QWORD *)(v6 + 8) = v7;
*v7 = v6;
++DevicesList;
qword_140C48AD0 = v6;
}
}
return 0;
}Referenced by:
HalpKdSetupDebuggingDevice