KiLogUserCetSetContextIpValidationFailure

VOID __fastcall KiLogUserCetSetContextIpValidationFailure(INT64 a1, INT64 a2, INT64 a3, UINT8 a4){
  int v5; 
  int v6; 
  int v7; 
  struct _EX_RUNDOWN_REF *v8; 
  signed __int32 Ptr_high; 
  signed __int32 v10; 
  WORK_QUEUE_ITEM *Pool2; 
  INT64 v12; 
  v5 = a4;
  v6 = a2;
  v7 = a1;
  v8 = (struct _EX_RUNDOWN_REF *)*((_QWORD *)KeGetCurrentThread() + 68);
  _m_prefetchw((char *)&v8[314].Ptr + 4);
  Ptr_high = HIDWORD(v8[314].Ptr);
  do
  {
    v10 = Ptr_high;
    Ptr_high = _InterlockedCompareExchange((volatile signed __int32 *)&v8[314].Ptr + 1, Ptr_high | 0x80000, Ptr_high);
  }
  while( v10 != Ptr_high );
  if( (Ptr_high & 0x80000) == 0 )
  {
    Pool2 = (WORK_QUEUE_ITEM *)ExAllocatePool2(256i64, 0x40ui64, 0x63736C4Bui64);
    if( Pool2 )
    {
      if( ExAcquireRundownProtection(v8 + 139) )
      {
        ObfReferenceObject(v8);
        Pool2->List.Flink = 0i64;
        Pool2->WorkerRoutine = (void(__fastcall *)(void *))KiLogUserCetSetContextIpValidationFailureWorker;
        Pool2->Parameter = Pool2;
        LODWORD(Pool2[1].List.Flink) = v7;
        Pool2[1].List.Blink = (_LIST_ENTRY *)v8;
        Pool2[1].WorkerRoutine = (void(__fastcall *)(void *))a3;
        LODWORD(Pool2[1].Parameter) = v5;
        HIDWORD(Pool2[1].Parameter) = v6;
        ExQueueWorkItem(Pool2, DelayedWorkQueue);
      }
      else
      {
        ExFreePoolWithTag(Pool2, 0);
      }
    }
    LODWORD(v12) = 0;
    wil_details_FeatureReporting_ReportUsageToService(
      &Feature_CET_User_Audit_Livedump__private_reporting,
      0x178806Fui64,
      0i64,
      0i64,
      (FEATURE_LOGGED_TRAITS *)&Feature_PdttSupport_logged_traits,
      v12);
  }
}

Referenced by:

KeVerifyContextIpForUserCet