WheapInitializeErrorSourceTable

NTSTATUS __stdcall WheapInitializeErrorSourceTable(UINT64 Count, _WHEA_ERROR_SOURCE_DESCRIPTOR *Buffer){
  int v2; 
  unsigned int v4; 
  VOID **PoolWithTag; 
  VOID **v6; 
  VOID **v7; 
  _WHEA_ERROR_SOURCE_DESCRIPTOR *v8; 
  __int64 v9; 
  __int128 v10; 
  char *v11; 
  int v12; 

  v2 = 0;
  v4 = Count;
  if( !(_DWORD)Count )
    return 0;
  while( 1 )
  {
    if( Buffer->Type > (unsigned int)WheaErrSrcTypeDeviceDriver )
      goto LABEL_11;
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x430ui64, 1634035799i64);
    v6 = PoolWithTag;
    if( !PoolWithTag )
      return -1073741670;
    memset(PoolWithTag, 0i64, 0x430u);
    v7 = v6 + 12;
    v8 = Buffer;
    v9 = 7i64;
    do
    {
      v10 = *(_OWORD *)&v8->Length;
      v8 = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((char *)v8 + 128);
      *(_OWORD *)v7 = v10;
      v7 += 16;
      *((_OWORD *)v7 - 7) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 820);
      *((_OWORD *)v7 - 6) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 836);
      *((_OWORD *)v7 - 5) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 852);
      *((_OWORD *)v7 - 4) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 868);
      *((_OWORD *)v7 - 3) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 884);
      *((_OWORD *)v7 - 2) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 900);
      *((_OWORD *)v7 - 1) = *(_OWORD *)((char *)&v8[-1].Info.DeviceDriverDescriptor + 916);
      --v9;
    }
    while( v9 );
    *(_OWORD *)v7 = *(_OWORD *)&v8->Length;
    *((_OWORD *)v7 + 1) = *(_OWORD *)&v8->MaxRawDataLength;
    *((_OWORD *)v7 + 2) = *(_OWORD *)&v8->PlatformErrorSourceId;
    *((_OWORD *)v7 + 3) = *(_OWORD *)&v8->Info.AerEndpointDescriptor.Slot.u;
    v7[8] = *(VOID **)&v8->Info.DeviceDriverDescriptor.PacketLength;
    *((_DWORD *)v7 + 18) = v8->Info.XpfMceDescriptor.Banks[0].StatusMsr;
    v11 = (char *)&stru_140CF2E80 + 5320;
    if( *((_BYTE *)&stru_140CF2E80 + 64 * (__int64)(int)Buffer->Type + 5320) )
    {
      v12 = WheapInitializeErrorSource((_WHEAP_ERROR_SOURCE *)v6);
      if( v12 < 0 )
      {
        ExFreeHeapPool(v6);
        return v12;
      }
    }
    else
    {
      *((_DWORD *)v6 + 10) = Buffer->Type;
      *((_BYTE *)v6 + 88) = 1;
    }
    if( *((_DWORD *)v6 + 26) != 5 || *((_DWORD *)v6 + 36) == 0xFFFF )
      WheapAddErrorSource(v11, v6);
    Buffer = (_WHEA_ERROR_SOURCE_DESCRIPTOR *)((char *)Buffer + Buffer->Length);
LABEL_11:
    if( ++v2 >= v4 )
      return 0;
  }
}

Referenced by:

WheaInitialize