WheaAddErrorSourceDeviceDriver
VOID __fastcall WheaAddErrorSourceDeviceDriver(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
void *PoolWithTag;
__int64 v5;
void *v6;
unsigned int v9;
int v10;
__int128 v11;
__int128 v12;
int PacketLength;
VOID *v14;
INT64 result;
int v16;
int v17;
int v18;
int v19;
unsigned int v20;
int v21;
_QWORD v22[3];
int v23;
int v24;
int v25;
void *v26;
__int64 v27;
__int64 v28;
INT64(__fastcall *v29)(INT64, _DWORD *);
__int128 v30;
__int128 v31;
int v32;
int v33;
VOID *v34;
PoolWithTag = 0i64;
v5 = (unsigned int)a3;
v6 = 0i64;
if( *(_QWORD *)(a2 + 28) && *(_QWORD *)(a2 + 36) && *(_DWORD *)a2 == 2 )
{
v9 = *(_DWORD *)(a2 + 48) + 2;
v10 = *(_DWORD *)(a2 + 44) * v9;
if( !byte_140CF4748 )
WheaConfigureErrorSource(16, (__int64)WheaDeviceDriverDefaultSourceConfig);
memset((INT64)&result, 0i64);
LOWORD(v23) = *(_WORD *)(a2 + 20);
v27 = *(_QWORD *)(a2 + 28);
v28 = *(_QWORD *)(a2 + 36);
v29 = WheapCorrectErrorSourceDeviceDriver;
result = 0xB000003CCi64;
v16 = 16;
v17 = 1;
v19 = v5;
v20 = v9;
v21 = 0;
LODWORD(v22[0]) = 0;
v18 = v10;
v26 = 0i64;
v34 = 0i64;
v11 = *(_OWORD *)(a2 + 68);
v30 = *(_OWORD *)(a2 + 52);
v12 = *(_OWORD *)(a2 + 4);
v31 = v11;
*(_OWORD *)&v22[1] = v12;
if( (_DWORD)v5 && v10 )
{
PacketLength = WheapDeviceDriverGetPacketLength(*(_DWORD *)(a2 + 44) * v9, v9);
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, (unsigned int)(v5 * PacketLength), 0x41454857ui64);
v14 = ExAllocatePoolWithTag(NonPagedPoolNx, 104 * v5, 0x41454857ui64);
v6 = v14;
if( !PoolWithTag || !v14 )
return;
v32 = *(_DWORD *)(a2 + 44);
v33 = *(_DWORD *)(a2 + 48);
v26 = PoolWithTag;
v34 = v14;
v24 = PacketLength;
v25 = v5;
}
if( (int)WheaAddErrorSource((_WHEA_ERROR_SOURCE_DESCRIPTOR *)&result, (PVOID)a1) < 0 )
{
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0x41454857u);
if( v6 )
ExFreePoolWithTag(v6, 0x41454857u);
}
}
}Referenced by:
WheaAddErrorSourceDeviceDriverV1