WheapGetErrorSource

_WHEAP_ERROR_SOURCE *__stdcall WheapGetErrorSource(
        _WHEAP_ERROR_SOURCE_TABLE *ErrorSourceTable,
        UINT64 ErrorSourceId,
        INT64 a3,
        UINT64 a4){
  int v4; 
  int v5; 
  _WHEAP_ERROR_SOURCE *result; 

  if( *(_DWORD *)ErrorSourceTable != 1279410516 )
    return 0i64;
  v4 = *((_DWORD *)ErrorSourceTable + 1);
  v5 = 0;
  result = (_WHEAP_ERROR_SOURCE *)*((_QWORD *)ErrorSourceTable + 2);
  if( v4 <= 0 )
    return 0i64;
  while( result->Descriptor.ErrorSourceId != (_DWORD)ErrorSourceId
       || result->Deferred
       || result->Descriptor.State != WheaErrSrcStateStarted )
  {
    result = (_WHEAP_ERROR_SOURCE *)result->ListEntry.Flink;
    if( ++v5 >= v4 )
      return 0i64;
  }
  return result;
}

Referenced by:

HalHandleNMI
HalpMcaReportError
WheaAddHwErrorReportSectionDeviceDriver
WheaGetErrorSource
WheaHwErrorReportSubmitDeviceDriver
WheaRemoveErrorSource
WheaReportHwError
WheapAttemptArchitecturalErrorRecovery
WheapFreeDriverPacketBuffer
WheapGetPreallocatedPacketBuffer
WheapInitErrorReportDeviceDriver
WheapReportBootError
WheapWmiExecuteErrorSourceMethod