ObpStopRuntimeStackTrace

NTSTATUS __stdcall ObpStopRuntimeStackTrace(){
  _ETHREAD *CurrentThread; 
  wchar_t *Buffer; 
  unsigned int v2; 
  _STACK_TABLE *v3; 
  _OBJECT_REF_INFO **v4; 
  _SINGLE_LIST_ENTRY *v5; 
  _SINGLE_LIST_ENTRY *v6; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  Buffer = 0i64;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockExclusiveEx(&stru_140C25A40, 0i64);
  if( (ObpTraceFlags & 2) != 0 )
  {
    if( (ObpTraceFlags & 0x10) != 0 )
      memset(dword_140C25940, 0i64, 0x40u);
    if( (ObpTraceFlags & 0x20) != 0 )
    {
      Buffer = stru_140C259D0.Buffer;
      RtlInitUnicodeStringEx(&stru_140C259D0, 0i64);
    }
    dword_140C259F8 = 0;
    v2 = dword_140C259FC | ObpTraceFlags & 0xFFFFFF8C;
    ObpTraceFlags = v2;
    if( (v2 & 1) != 0 )
    {
      qword_140C259F0 = (unsigned __int64)&unk_140C25980 & -(__int64)((v2 & 0x10) != 0);
      qword_140C259C0 = (PCUNICODE_STRING)((unsigned __int64)&qword_140C259E0 & -(__int64)((v2 & 0x20) != 0));
      if( (_InterlockedExchangeAdd64(&stru_140C25A40._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock(&stru_140C25A40);
      KeAbPostRelease(&stru_140C25A40);
      KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    }
    else
    {
      qword_140C259F0 = 0i64;
      qword_140C259C0 = 0i64;
      dword_140C25A10 = 0;
      dword_140C25A14 = 0;
      v3 = (_STACK_TABLE *)StackTable;
      v4 = (_OBJECT_REF_INFO **)ObjectTable;
      ObpTraceFlags = v2 & 0xFFFFFF8C;
      RtlpInterlockedFlushSList();
      StackTable = 0i64;
      v6 = v5;
      ObjectTable = 0i64;
      if( (_InterlockedExchangeAdd64(&stru_140C25A40._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock(&stru_140C25A40);
      KeAbPostRelease(&stru_140C25A40);
      KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
      ObpDestroyStackAndObjectTables(v3, v4, v6);
    }
    if( Buffer )
      ExFreePoolWithTag(Buffer, 0x7452624Fu);
  }
  else
  {
    if( (_InterlockedExchangeAdd64(&stru_140C25A40._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(&stru_140C25A40);
    KeAbPostRelease(&stru_140C25A40);
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  }
  return 0;
}

Referenced by:

ObSetRefTraceInformation