AlpcpCleanupProcessViews

void __fastcall AlpcpCleanupProcessViews(__int64 a1){
  _ETHREAD *CurrentThread; 
  _QWORD *v2; 
  volatile INT64 *v3; 
  const void *v4; 
  unsigned int v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  unsigned int v8; 
  unsigned __int64 v9; 
  __int64 v10; 
  __int64 v11; 
  void *v12; 
  _QWORD *v13; 
  const void *v14; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v2 = (_QWORD *)(a1 + 2056);
  --*((_WORD *)CurrentThread + 242);
  v3 = (volatile INT64 *)(a1 + 2048);
  v4 = 0i64;
  v5 = 0;
  v6 = 0i64;
  ExAcquirePushLockExclusiveEx(a1 + 2048, 0i64);
  v13 = v2;
  while( (_QWORD *)*v2 != v2 )
  {
    v7 = *v2 - 80i64;
    v8 = v5 + 1;
    v9 = 0i64;
    if( v4 == (const void *)v7 )
      v9 = v6;
    v5 = 0;
    if( v4 == (const void *)v7 )
      v5 = v8;
    v10 = *v2 - 80i64;
    if( v4 == (const void *)v7 )
      v10 = (__int64)v4;
    v14 = (const void *)v10;
    LODWORD(v11) = AlpcpReferenceBlob((PVOID)v7);
    v12 = (void *)(v7 & -(__int64)(v11 != 0));
    if( (_InterlockedExchangeAdd64(v3, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(v3);
    KeAbPostRelease((PVOID)v3);
    if( v9 )
    {
      v6 = v9;
      if( v5 > 0x64 )
      {
        v2 = v13;
        if( *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v9 - KUSER_SHARED_DATA.InterruptTimeBias > 0x23C34600 )
        {
          DbgPrintEx(0x69u, 0, "ALPC: View @ %p is stuck.\n", v14);
          if( (_BYTE)KdDebuggerEnabled )
            __debugbreak();
          v5 = 0;
          v6 = 0i64;
        }
      }
    }
    else
    {
      v2 = v13;
      v6 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - KUSER_SHARED_DATA.InterruptTimeBias;
    }
    if( v12 )
    {
      AlpcpForceUnlinkSecureView((ULONG_PTR)v12);
      AlpcpDereferenceBlobEx(v12, 1i64);
    }
    ExAcquirePushLockExclusiveEx((UINT64)v3, 0i64);
    v4 = v14;
  }
  if( (_InterlockedExchangeAdd64(v3, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v3);
  KeAbPostRelease((PVOID)v3);
  KeLeaveCriticalRegion();
}

Referenced by:

LpcExitProcess