WheaAddErrorSource
NTSTATUS __stdcall WheaAddErrorSource(_WHEA_ERROR_SOURCE_DESCRIPTOR *Descriptor, VOID *Context){
_WHEA_ERROR_SOURCE_DESCRIPTOR *v2;
__int64 v4;
VOID **PoolWithTag;
INT64 v6;
INT64 v7;
_WHEA_ERROR_SOURCE_DESCRIPTOR *v8;
__int64 v9;
__int128 v10;
__int64 v11;
int v12;
char *v13;
__int128 v14;
__int128 v15;
__int128 v16;
__int128 v17;
__int128 v18;
__int128 v19;
__int128 v20;
__int128 v21;
__int64 v22;
__int128 v23;
__int128 v24;
__int128 v25;
int Src[8];
char v28;
int v29;
char v30;
v2 = Descriptor;
v4 = 7i64;
if( WheapIsNonHestErrorSource((unsigned int)Descriptor->Type) )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x430ui64, 1634035799i64);
v6 = (INT64)PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, 0x430u);
v7 = v6 + 96;
v8 = v2;
v9 = 7i64;
do
{
*(_OWORD *)v7 = *(_OWORD *)&v8->Length;
*(_OWORD *)(v7 + 16) = *(_OWORD *)&v8->MaxRawDataLength;
*(_OWORD *)(v7 + 32) = *(_OWORD *)&v8->PlatformErrorSourceId;
*(_OWORD *)(v7 + 48) = *(_OWORD *)&v8->Info.AerEndpointDescriptor.Slot.u;
*(_OWORD *)(v7 + 64) = *(_OWORD *)&v8->Info.DeviceDriverDescriptor.PacketLength;
*(_OWORD *)(v7 + 80) = *(_OWORD *)&v8->Info.DeviceDriverDescriptor.Config.Initialize;
*(_OWORD *)(v7 + 96) = *(_OWORD *)&v8->Info.DeviceDriverDescriptor.Config.Correct;
v7 += 128i64;
v10 = *(_OWORD *)v8->Info.DeviceDriverDescriptor.CreatorId.Data4;
v8 = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((char *)v8 + 128);
*(_OWORD *)(v7 - 16) = v10;
--v9;
}
while( v9 );
*(_OWORD *)v7 = *(_OWORD *)&v8->Length;
*(_OWORD *)(v7 + 16) = *(_OWORD *)&v8->MaxRawDataLength;
*(_OWORD *)(v7 + 32) = *(_OWORD *)&v8->PlatformErrorSourceId;
*(_OWORD *)(v7 + 48) = *(_OWORD *)&v8->Info.AerEndpointDescriptor.Slot.u;
*(_QWORD *)(v7 + 64) = *(_QWORD *)&v8->Info.DeviceDriverDescriptor.PacketLength;
*(_DWORD *)(v7 + 72) = v8->Info.XpfMceDescriptor.Banks[0].StatusMsr;
v12 = WheapInitializeErrorSource((_WHEAP_ERROR_SOURCE *)v6);
if( v12 )
{
ExFreePoolWithTag((PVOID)v6, 0x61656857u);
}
else
{
*(_QWORD *)(v6 + 56) = Context;
WheapAddErrorSource(v11, v6);
if( WheapInitializationComplete )
{
*(_DWORD *)(v6 + 108) = 2;
v12 = WheapCallErrorSourceInitialize(v6, 1ui64);
if( v12 < 0 )
*(_DWORD *)(v6 + 108) = 1;
}
}
}
else
{
v12 = -1073741670;
}
}
else
{
v12 = -1073741637;
}
Src[3] = 0;
v13 = &v28;
Src[0] = 1733060695;
Src[1] = 1;
Src[2] = 1009;
Src[5] = -2147483636;
Src[4] = 1280201291;
Src[6] = 2;
Src[7] = 977;
do
{
v14 = *(_OWORD *)&v2->Length;
v15 = *(_OWORD *)&v2->MaxRawDataLength;
v2 = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((char *)v2 + 128);
*(_OWORD *)v13 = v14;
v16 = *(_OWORD *)((char *)&v2[-1].Info.DeviceDriverDescriptor + 836);
*((_OWORD *)v13 + 1) = v15;
v17 = *(_OWORD *)((char *)&v2[-1].Info.DeviceDriverDescriptor + 852);
*((_OWORD *)v13 + 2) = v16;
v18 = *(_OWORD *)((char *)&v2[-1].Info.DeviceDriverDescriptor + 868);
*((_OWORD *)v13 + 3) = v17;
v19 = *(_OWORD *)((char *)&v2[-1].Info.DeviceDriverDescriptor + 884);
*((_OWORD *)v13 + 4) = v18;
v20 = *(_OWORD *)((char *)&v2[-1].Info.DeviceDriverDescriptor + 900);
*((_OWORD *)v13 + 5) = v19;
v21 = *(_OWORD *)((char *)&v2[-1].Info.DeviceDriverDescriptor + 916);
*((_OWORD *)v13 + 6) = v20;
v13 += 128;
*((_OWORD *)v13 - 1) = v21;
--v4;
}
while( v4 );
v22 = *(_QWORD *)&v2->Info.DeviceDriverDescriptor.PacketLength;
v23 = *(_OWORD *)&v2->MaxRawDataLength;
*(_OWORD *)v13 = *(_OWORD *)&v2->Length;
v24 = *(_OWORD *)&v2->PlatformErrorSourceId;
*((_OWORD *)v13 + 1) = v23;
v25 = *(_OWORD *)&v2->Info.AerEndpointDescriptor.Slot.u;
*((_OWORD *)v13 + 2) = v24;
*((_OWORD *)v13 + 3) = v25;
*((_QWORD *)v13 + 8) = v22;
*((_DWORD *)v13 + 18) = v2->Info.XpfMceDescriptor.Banks[0].StatusMsr;
v29 = v12;
v30 = 0;
WheaLogInternalEvent(Src);
return v12;
}Referenced by:
WheaAddErrorSourceDeviceDriver