HalpIrtReleaseDeviceAperture
VOID __fastcall HalpIrtReleaseDeviceAperture(INT64 a1, INT64 a2){
int v2;
int v3;
__int64 *i;
bool v5;
__int64 v6;
__int64 **v7;
__int64 v8;
v2 = a1;
v3 = a2;
ExAcquireFastMutex(&HalpIrtLock);
for( i = (__int64 *)HalpIrtAllocatedDeviceAperturesHead; i != &HalpIrtAllocatedDeviceAperturesHead; i = (__int64 *)*i )
{
if( *((_DWORD *)i + 4) == v2 )
{
v5 = *((_DWORD *)i + 5) == v3;
*((_DWORD *)i + 5) -= v3;
if( v5 )
{
*((_DWORD *)i + 6) = 0;
*((_DWORD *)i + 7) = 0;
v6 = *i;
if( *(__int64 **)(*i + 8) != i
|| (v7 = (__int64 **)i[1], *v7 != i)
|| (*v7 = (__int64 *)v6,
*(_QWORD *)(v6 + 8) = v7,
v8 = HalpIrtFreeDeviceAperturesHead,
*(__int64 **)(HalpIrtFreeDeviceAperturesHead + 8) != &HalpIrtFreeDeviceAperturesHead) )
{
__fastfail(3u);
}
*i = HalpIrtFreeDeviceAperturesHead;
i[1] = (__int64)&HalpIrtFreeDeviceAperturesHead;
*(_QWORD *)(v8 + 8) = i;
HalpIrtFreeDeviceAperturesHead = (__int64)i;
}
break;
}
}
KeReleaseGuardedMutex(&HalpIrtLock);
}Referenced by:
HalpIrtAllocateIndex
HalpIrtFreeIndex