WheaAddErrorSource
INT64 __stdcall WheaAddErrorSource(_WHEA_ERROR_SOURCE_DESCRIPTOR *Descriptor, PVOID 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 + 2)) )
{
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x430ui64, 0x61656857ui64);
v6 = (INT64)PoolWithTag;
if( PoolWithTag )
{
memset((INT64)PoolWithTag, 0i64);
v7 = v6 + 96;
v8 = v2;
v9 = 7i64;
do
{
*(_OWORD *)v7 = *(_OWORD *)v8;
*(_OWORD *)(v7 + 16) = *((_OWORD *)v8 + 1);
*(_OWORD *)(v7 + 32) = *((_OWORD *)v8 + 2);
*(_OWORD *)(v7 + 48) = *((_OWORD *)v8 + 3);
*(_OWORD *)(v7 + 64) = *((_OWORD *)v8 + 4);
*(_OWORD *)(v7 + 80) = *((_OWORD *)v8 + 5);
*(_OWORD *)(v7 + 96) = *((_OWORD *)v8 + 6);
v7 += 128i64;
v10 = *((_OWORD *)v8 + 7);
v8 = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((char *)v8 + 128);
*(_OWORD *)(v7 - 16) = v10;
--v9;
}
while( v9 );
*(_OWORD *)v7 = *(_OWORD *)v8;
*(_OWORD *)(v7 + 16) = *((_OWORD *)v8 + 1);
*(_OWORD *)(v7 + 32) = *((_OWORD *)v8 + 2);
*(_OWORD *)(v7 + 48) = *((_OWORD *)v8 + 3);
*(_QWORD *)(v7 + 64) = *((_QWORD *)v8 + 8);
*(_DWORD *)(v7 + 72) = *((_DWORD *)v8 + 18);
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;
v15 = *((_OWORD *)v2 + 1);
v2 = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((char *)v2 + 128);
*(_OWORD *)v13 = v14;
v16 = *((_OWORD *)v2 - 6);
*((_OWORD *)v13 + 1) = v15;
v17 = *((_OWORD *)v2 - 5);
*((_OWORD *)v13 + 2) = v16;
v18 = *((_OWORD *)v2 - 4);
*((_OWORD *)v13 + 3) = v17;
v19 = *((_OWORD *)v2 - 3);
*((_OWORD *)v13 + 4) = v18;
v20 = *((_OWORD *)v2 - 2);
*((_OWORD *)v13 + 5) = v19;
v21 = *((_OWORD *)v2 - 1);
*((_OWORD *)v13 + 6) = v20;
v13 += 128;
*((_OWORD *)v13 - 1) = v21;
--v4;
}
while( v4 );
v22 = *((_QWORD *)v2 + 8);
v23 = *((_OWORD *)v2 + 1);
*(_OWORD *)v13 = *(_OWORD *)v2;
v24 = *((_OWORD *)v2 + 2);
*((_OWORD *)v13 + 1) = v23;
v25 = *((_OWORD *)v2 + 3);
*((_OWORD *)v13 + 2) = v24;
*((_OWORD *)v13 + 3) = v25;
*((_QWORD *)v13 + 8) = v22;
*((_DWORD *)v13 + 18) = *((_DWORD *)v2 + 18);
v29 = v12;
v30 = 0;
WheaLogInternalEvent(Src);
return(unsigned int)v12;
}Referenced by:
WheaAddErrorSourceDeviceDriver