RtlpHpLfhContextCompact

VOID __stdcall RtlpHpLfhContextCompact(
        POBJECT_ATTRIBUTES ObjectAttributes,
        PFILE_NETWORK_OPEN_INFORMATION FileInformation){
  int v2; 
  int v4; 
  UINT8 v5; 
  INT64 *p_SecurityDescriptor; 
  __int64 v7; 
  v2 = (int)FileInformation;
  v4 = (unsigned __int8)FileInformation & 1;
  if( ((unsigned __int8)FileInformation & 1) != 0 )
    v5 = -1;
  else
    v5 = RtlpHpAcquireLockShared((INT64 *)&ObjectAttributes[1].Attributes, BYTE1(ObjectAttributes[1].RootDirectory));
  p_SecurityDescriptor = (INT64 *)&ObjectAttributes[2].SecurityDescriptor;
  v7 = 129i64;
  do
  {
    if( (*p_SecurityDescriptor & 1) == 0 )
      RtlpHpLfhOwnerCompact((INT64)ObjectAttributes, *p_SecurityDescriptor, v2 | 1u);
    ++p_SecurityDescriptor;
    --v7;
  }
  while( v7 );
  if( !v4 )
  {
    if( BYTE1(ObjectAttributes[1].RootDirectory) )
    {
      ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&ObjectAttributes[1].Attributes);
      __writecr8(v5);
    }
    else
    {
      if( _InterlockedCompareExchange64((volatile signed __int64 *)&ObjectAttributes[1].Attributes, 0i64, 17i64) != 17 )
        ExfReleasePushLockShared((INT64 *)&ObjectAttributes[1].Attributes);
      KeAbPostRelease(&ObjectAttributes[1].Attributes);
      KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    }
  }
}

Referenced by:

RtlpHpHeapCompact