WdipSemDisableContextProvider

__int64 __fastcall WdipSemDisableContextProvider(__int64 a1, char a2){
  _ETHREAD *CurrentThread; 
  int v3; 
  __int64 v6; 
  UINT16 v7; 
  UINT64 EnableProperty; 
  UINT64 ControlCode; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0;
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)&qword_140C1C3C8, 0i64);
  if( a1 )
  {
    WdipSemCaptureState((GUID *)a1, a2);
    if( *(_DWORD *)(a1 + 32) != 1 )
    {
      v6 = *(_QWORD *)(a1 + 40);
      v7 = _InterlockedExchange(&WdipContextLoggerId, WdipContextLoggerId);
      if( (*(_DWORD *)(v6 + 72))-- == 1 )
      {
        if( *(_DWORD *)(v6 + 40) )
        {
          LODWORD(ControlCode) = 1;
          LODWORD(EnableProperty) = *(_DWORD *)(v6 + 32);
          v3 = WdipSemEnableDisableTrace(
                 v7,
                 (const _GUID *)a1,
                 *(_BYTE *)(v6 + 16),
                 *(_QWORD *)(v6 + 24),
                 EnableProperty,
                 ControlCode);
          if( v3 >= 0 )
          {
            *(_BYTE *)(v6 + 48) = *(_BYTE *)(v6 + 16);
            *(_QWORD *)(v6 + 56) = *(_QWORD *)(v6 + 24);
            *(_DWORD *)(v6 + 64) = *(_DWORD *)(v6 + 32);
          }
        }
        else
        {
          LODWORD(ControlCode) = 0;
          LODWORD(EnableProperty) = 0;
          v3 = WdipSemEnableDisableTrace(v7, (const _GUID *)a1, 0, 0i64, EnableProperty, ControlCode);
          if( v3 >= 0 )
          {
            *(_OWORD *)(v6 + 48) = 0i64;
            *(_OWORD *)(v6 + 64) = 0i64;
          }
        }
      }
    }
  }
  else
  {
    v3 = -1073741811;
  }
  ExReleasePushLockEx((UINT64)&qword_140C1C3C8, 0i64);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return(unsigned int)v3;
}

Referenced by:

WdipSemDisableContextProviders