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