MiFreeRetpolineImportInfo
VOID __stdcall MiFreeRetpolineImportInfo(INT64 a1){
_ETHREAD *CurrentThread;
_CONTROL_AREA *v2;
_EX_PUSH_LOCK *DynamicRelocations;
_EX_PUSH_LOCK *v4;
__int64 bf_0;
void *v6;
__int64 v7;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( *(_QWORD *)(a1 + 112) )
{
v2 = MiSectionControlArea(*(_SECTION **)(a1 + 112));
DynamicRelocations = (_EX_PUSH_LOCK *)v2->u2.SeImageStub->DynamicRelocations;
--CurrentThread->Tcb.SpecialApcDisable;
v4 = DynamicRelocations + 3;
ExAcquirePushLockExclusiveEx(DynamicRelocations + 3, 0i64);
bf_0 = DynamicRelocations[12]._bf_0;
v6 = *(void **)(bf_0 + 16);
*(_QWORD *)(bf_0 + 16) = 0i64;
if( (_InterlockedExchangeAdd64(&v4->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v4);
KeAbPostRelease(v4);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
if( (MiFlags & 0x10000) != 0 )
VslFreeSecureImageIat(v2->u2.SeImageStub->StrongImageReference);
MiWalkEntireImage(v2, Opaque, 16i64, 0xFFFFFFFFui64);
}
else
{
v7 = *(_QWORD *)(a1 + 296);
v6 = *(void **)(v7 + 16);
*(_QWORD *)(v7 + 16) = 0i64;
}
if( v6 )
ExFreePoolWithTag(v6, 0);
}Referenced by:
No references.