HalpRegisterDeviceInUse
VOID __fastcall HalpRegisterDeviceInUse(_DEBUG_DEVICE_DESCRIPTOR *Device){
KD_NAMESPACE_ENUM NameSpace;
unsigned int v3;
size_t v4;
VOID **PoolWithTag;
VOID **v6;
VOID ***v7;
NameSpace = Device->NameSpace;
if( NameSpace != KdNameSpaceNone && (unsigned int)NameSpace <= KdNameSpaceACPI && !HalpFindDevice(Device) )
{
v3 = Device->NameSpacePathLength + 2;
v4 = Device->NameSpacePathLength + 274;
if( LoaderBlock )
HalpMmAllocateMemory(Device->NameSpacePathLength + 274);
else
PoolWithTag = ExAllocatePoolWithTag(1ui64, Device->NameSpacePathLength + 274, 543973704i64);
v6 = PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v4);
v6[2] = v6 + 3;
*(_OWORD *)(v6 + 3) = *(_OWORD *)&Device->Bus;
*(_OWORD *)(v6 + 5) = *(_OWORD *)&Device->ProgIf;
*(_OWORD *)(v6 + 7) = *(_OWORD *)&Device->BaseAddress[0].TranslatedAddress;
*(_OWORD *)(v6 + 9) = *(_OWORD *)&Device->BaseAddress[1].Type;
*(_OWORD *)(v6 + 11) = *(_OWORD *)&Device->BaseAddress[1].Length;
*(_OWORD *)(v6 + 13) = *(_OWORD *)&Device->BaseAddress[2].TranslatedAddress;
*(_OWORD *)(v6 + 15) = *(_OWORD *)&Device->BaseAddress[3].Type;
*(_OWORD *)(v6 + 17) = *(_OWORD *)&Device->BaseAddress[3].Length;
*(_OWORD *)(v6 + 19) = *(_OWORD *)&Device->BaseAddress[4].TranslatedAddress;
*(_OWORD *)(v6 + 21) = *(_OWORD *)&Device->BaseAddress[5].Type;
*(_OWORD *)(v6 + 23) = *(_OWORD *)&Device->BaseAddress[5].Length;
*(_OWORD *)(v6 + 25) = *(_OWORD *)&Device->Memory.MaxEnd.anonymous_0.LowPart;
*(_OWORD *)(v6 + 27) = *(_OWORD *)&Device->Memory.Length;
*(_OWORD *)(v6 + 29) = *(_OWORD *)&Device->OemData;
*(_OWORD *)(v6 + 31) = *(_OWORD *)&Device->NameSpacePath;
v6[33] = (VOID *)Device->TransportData;
if( Device->NameSpace == KdNameSpaceACPI && Device->NameSpacePath )
{
*((_QWORD *)v6[2] + 28) = (char *)v6[2] + 248;
wcscpy_s(*((PWCHAR *)v6[2] + 28), (unsigned __int64)v3 >> 1, Device->NameSpacePath);
}
v7 = (VOID ***)*(&CmpDummyThreadEvent + 530);
if( (_UNKNOWN *)**(&CmpDummyThreadEvent + 530) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 4232) )
__fastfail(3u);
*v6 = (char *)&CmpDummyThreadEvent + 4232;
v6[1] = v7;
*v7 = v6;
++*(&CmpDummyThreadEvent + 1056);
*(&CmpDummyThreadEvent + 530) = v6;
}
}
}Referenced by:
HalpKdSetupDebuggingDevice