EtwpCoverageEnsureUserModeView

NTSTATUS __stdcall EtwpCoverageEnsureUserModeView(INT64 a1){
  _EPROCESS *Process; 
  _PEB *Peb; 
  _ETHREAD *CurrentThread; 
  _DWORD *v4; 
  _EWOW64PROCESS *WoW64Process; 
  char v6; 
  UINT64 v8; 
  UINT64 Win32Protect; 
  int v10; 
  UINT64 CapturedViewSize; 
  _LARGE_INTEGER SectionOffset; 
  VOID *CapturedBase; 
  _EPROCESS *v14; 

  CapturedBase = 0i64;
  Process = KeGetCurrentThread()->ApcState.Process;
  v14 = Process;
  Peb = Process->Peb;
  if( Peb->TelemetryCoverageHeader )
  {
    v10 = 0;
  }
  else
  {
    SectionOffset.QuadPart = 0i64;
    CapturedViewSize = 0i64;
    LODWORD(Win32Protect) = 2;
    LODWORD(v8) = 0;
    v10 = MmMapViewOfSection(
            *(VOID **)(a1 + 8),
            Process,
            &CapturedBase,
            0i64,
            0i64,
            &SectionOffset,
            &CapturedViewSize,
            ViewShare,
            v8,
            Win32Protect);
    if( v10 >= 0 )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.KernelApcDisable;
      ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 166, 0i64);
      qword_140C50300 = (__int64)KeGetCurrentThread();
      if( !Peb->TelemetryCoverageHeader )
      {
        Peb->TelemetryCoverageHeader = CapturedBase;
        CapturedBase = 0i64;
      }
      v4 = 0i64;
      WoW64Process = Process->WoW64Process;
      if( WoW64Process )
        v4 = WoW64Process->Peb;
      if( v4 )
        v4[279] = Peb->TelemetryCoverageHeader;
      v10 = 0;
    }
  }
  if( (struct _KTHREAD *)qword_140C50300 == KeGetCurrentThread() )
  {
    qword_140C50300 = 0i64;
    v6 = _InterlockedExchangeAdd64((_QWORD *)&ExBootDevicesRemovedEvent + 166, 0xFFFFFFFFFFFFFFFFui64);
    if( (v6 & 2) != 0 && (v6 & 4) == 0 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&ExBootDevicesRemovedEvent + 166);
    KeAbPostRelease((char *)&ExBootDevicesRemovedEvent + 1328);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
  }
  if( CapturedBase )
    MiUnmapViewOfSection(Process, CapturedBase, 0i64);
  return v10;
}

Referenced by:

EtwSetProcessTelemetryCoverage