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