EtwpUnregisterPartitionPages
__int64 __fastcall EtwpUnregisterPartitionPages(_QWORD *a1, __int64 a2){
__int64 v3;
void *v4;
unsigned __int64 v6;
int v7;
__int64 v8;
__int64 v9;
int v10;
__int64 v11;
_QWORD *i;
__int64 v14;
__int64 v15;
v3 = 0i64;
v4 = 0i64;
v6 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&ExBootDevicesRemovedEvent + 146);
v7 = *(&ExBootDevicesRemovedEvent + 289) >> 5;
v8 = -1i64 << (*(&ExBootDevicesRemovedEvent + 1156) & 0x1F);
v9 = a2 & v8;
if( *(&ExBootDevicesRemovedEvent + 289) >> 5 )
{
v10 = v7 - 1;
v14 = a2 & v8;
v11 = *(&ExBootDevicesRemovedEvent + 145)
+ 8i64
* ((v7 - 1) & (HIBYTE(v14)
+ 37
* (BYTE6(v14)
+ 37
* (BYTE5(v14)
+ 37
* (BYTE4(v14)
+ 37
* (BYTE3(v14)
+ 37 * (BYTE2(v14) + 37 * (BYTE1(v14) + 37 * ((unsigned int)(unsigned __int8)v9 + 11623883)))))))));
while( 1 )
{
v11 = *(_QWORD *)v11;
if( (v11 & 1) != 0 )
break;
if( v9 == (v8 & *(_QWORD *)(v11 + 8)) )
goto LABEL_7;
}
v11 = 0i64;
LABEL_7:
if( v11 )
{
v3 = *(_QWORD *)(v11 + 16);
v4 = (void *)v11;
if( a1 )
*a1 = *(_QWORD *)(v11 + 24);
v15 = v8 & *(_QWORD *)(v11 + 8);
for( i = (_QWORD *)(*(&ExBootDevicesRemovedEvent + 145)
+ 8i64
* (v10 & (HIBYTE(v15)
+ 37
* (BYTE6(v15)
+ 37
* (BYTE5(v15)
+ 37
* (BYTE4(v15)
+ 37
* (BYTE3(v15)
+ 37
* (BYTE2(v15)
+ 37 * (BYTE1(v15) + 37 * ((unsigned int)(unsigned __int8)v15 + 11623883))))))))));
(*i & 1) == 0;
i = (_QWORD *)*i )
{
if( *i == v11 )
{
*i = *(_QWORD *)v11;
--*(&ExBootDevicesRemovedEvent + 288);
*(_QWORD *)v11 |= 0x8000000000000002ui64;
break;
}
}
}
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&ExBootDevicesRemovedEvent + 146);
__writecr8(v6);
if( v4 )
ExFreePoolWithTag(v4, 0x4F777445u);
return v3;
}Referenced by:
EtwpFreePartitionMemory