ObDereferenceSecurityDescriptor
VOID __stdcall ObDereferenceSecurityDescriptor(PVOID SecurityDescriptor, UINT64 a2){
int v2;
volatile signed __int64 *v3;
signed __int64 v4;
__int64 v5;
signed __int64 v6;
signed __int64 v7;
_ETHREAD *CurrentThread;
volatile INT64 *v9;
volatile signed __int64 *v10;
__int64 v11;
volatile signed __int64 *i;
v2 = a2;
v3 = (volatile signed __int64 *)((char *)SecurityDescriptor - 32);
_m_prefetchw((char *)SecurityDescriptor - 24);
v4 = *((_QWORD *)SecurityDescriptor - 3);
v5 = (unsigned int)a2;
v6 = v4 - (unsigned int)a2;
if( v6 <= 0 )
{
LABEL_4:
if( v6 )
__fastfail(0xEu);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v9 = &ObsSecurityDescriptorCache[2 * (unsigned __int8)*((_DWORD *)v3 + 4)];
--*((_WORD *)CurrentThread + 242);
v10 = v9 + 1;
ExAcquirePushLockExclusiveEx((UINT64)v9, 0i64);
v11 = _InterlockedExchangeAdd64(v3 + 1, -v2) - v5;
if( v11 > 0 )
{
if( (_InterlockedExchangeAdd64(v9, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v9);
KeAbPostRelease((PVOID)v9);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
}
else
{
if( v11 )
__fastfail(0xEu);
for( i = (volatile signed __int64 *)*v10; i != v3; i = (volatile signed __int64 *)*i )
v10 = i;
*v10 = *v3;
if( (_InterlockedExchangeAdd64(v9, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v9);
KeAbPostRelease((PVOID)v9);
KeLeaveCriticalRegionThread((__int64)CurrentThread);
ExFreePoolWithTag((PVOID)v3, 0x6353624Fu);
}
}
else
{
while( 1 )
{
v7 = v4;
v4 = _InterlockedCompareExchange64(v3 + 1, v6, v4);
if( v7 == v4 )
break;
v6 = v4 - (unsigned int)a2;
if( v6 <= 0 )
goto LABEL_4;
}
}
}Referenced by:
EtwpDereferenceLoggerSecurityDescriptor
EtwpFreeGuidEntry
EtwpFreeLoggerContext
EtwpReferenceLoggerSecurityDescriptor
EtwpUpdateLoggerSecurityDescriptor
ExpWnfCreateNameInstance
ExpWnfDeleteNameInstance
IopCompleteUnloadOrDelete
IopGetSetSecurityObject
IopSetDeviceSecurityDescriptor
ObDeassignSecurity
ObQuerySecurityDescriptorInfo
ObReleaseObjectSecurity
ObSetSecurityDescriptorInfo
ObpAdjustCreatorAccessState
ObpCreateHandle
ObpReferenceSecurityDescriptor
SepAppendAceToTokenObjectAcl