WdipSemDisableContextProvider

NTSTATUS __stdcall WdipSemDisableContextProvider(_GUID *ProviderGuid, CHAR a2){
  _ETHREAD *CurrentThread; 
  int v3; 
  __int64 v6; 
  UINT64 v7; 
  UINT64 EnableProperty; 
  UINT64 ControlCode; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 0;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx(&stru_140C1C3C8, 0i64);
  if( ProviderGuid )
  {
    WdipSemCaptureState(ProviderGuid, a2);
    if( ProviderGuid[2].Data1 != 1 )
    {
      v6 = *(_QWORD *)ProviderGuid[2].Data4;
      v7 = (unsigned int)_InterlockedExchange(&WdipContextLoggerId, WdipContextLoggerId);
      if( (*(_DWORD *)(v6 + 72))-- == 1 )
      {
        if( *(_DWORD *)(v6 + 40) )
        {
          LODWORD(ControlCode) = 1;
          LODWORD(EnableProperty) = *(_DWORD *)(v6 + 32);
          v3 = WdipSemEnableDisableTrace(
                 v7,
                 ProviderGuid,
                 *(_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, ProviderGuid, 0, 0i64, EnableProperty, ControlCode);
          if( v3 >= 0 )
          {
            *(_OWORD *)(v6 + 48) = 0i64;
            *(_OWORD *)(v6 + 64) = 0i64;
          }
        }
      }
    }
  }
  else
  {
    v3 = -1073741811;
  }
  ExReleasePushLockEx((ULONG_PTR)&stru_140C1C3C8, 0);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v3;
}

Referenced by:

WdipSemDisableContextProviders