WheaRemoveErrorSourceDeviceDriver

NTSTATUS __stdcall WheaRemoveErrorSourceDeviceDriver(UINT64 ErrorSourceId){
  unsigned int v1; 
  NTSTATUS v2; 
  _WHEA_ERROR_SOURCE_DESCRIPTOR *ErrorSource; 
  _WHEA_ERROR_SOURCE_DESCRIPTOR *v4; 
  signed __int32 v5; 
  unsigned __int8 *PacketBuffer; 
  int Src[8]; 
  _NTSTRSAFE_PSTR pszDest[4]; 
  __int128 v10; 

  *(_OWORD *)pszDest = 0i64;
  v1 = ErrorSourceId;
  v10 = 0i64;
  v2 = 0;
  ErrorSource = WheaGetErrorSource(ErrorSourceId);
  v4 = ErrorSource;
  if( ErrorSource )
  {
    v5 = _InterlockedCompareExchange(&ErrorSource->Info.DeviceDriverDescriptor.OpenHandles, -1, 0);
    if( v5 != -1 )
    {
      if( v5 )
      {
        Src[0] = 1733060695;
        Src[1] = 1;
        Src[3] = 1;
        Src[7] = 32;
        Src[2] = 64;
        Src[5] = -2147483604;
        Src[4] = 1280201291;
        Src[6] = 2;
        RtlStringCchCopyA((CHAR *)pszDest, 0x20ui64, (CHAR *)"RemoveErrorSourceDeviceDriver");
        WheaLogInternalEvent(Src);
        return -1073740024;
      }
      else
      {
        PacketBuffer = v4->Info.DeviceDriverDescriptor.PacketBuffer;
        if( PacketBuffer )
        {
          ExFreePoolWithTag(PacketBuffer, 0x41454857u);
          ExFreePoolWithTag(v4->Info.DeviceDriverDescriptor.PacketStateBuffer, 0x41454857u);
          v4->Info.DeviceDriverDescriptor.PacketBuffer = 0i64;
          v4->Info.DeviceDriverDescriptor.PacketStateBuffer = 0i64;
        }
        WheaRemoveErrorSource(v1);
        v4->Info.DeviceDriverDescriptor.Config.Initialize = (int(__fastcall *)(void *, unsigned int))HalSystemVectorDispatchEntry;
        v4->Info.DeviceDriverDescriptor.Config.Uninitialize = (void(__fastcall *)(void *))xHalTimerWatchdogStop;
      }
    }
  }
  return v2;
}

Referenced by:

No references.