HalpIrtAllocateDeviceAperture
__int64 __fastcall HalpIrtAllocateDeviceAperture(int a1, int a2, int a3, int a4, _DWORD *a5){
int v9;
NTSTATUS v10;
__int64 *i;
__int64 v12;
__int64 v13;
v9 = 0;
v10 = 0;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&CmpDummyThreadEvent + 7776));
i = (__int64 *)*(&CmpDummyThreadEvent + 980);
if( *(&CmpDummyThreadEvent + 980) && (a4 != 3 || *(&CmpDummyThreadEvent + 1936) == 1) )
{
LABEL_4:
*((_DWORD *)i + 5) += a3;
}
else
{
while( 1 )
{
for( i = (__int64 *)*(&CmpDummyThreadEvent + 896);
i != (__int64 *)((char *)&CmpDummyThreadEvent + 7168);
i = (__int64 *)*i )
{
if( *((_DWORD *)i + 6) == a1 && *((_DWORD *)i + 7) == a2 )
goto LABEL_4;
}
i = (__int64 *)*(&CmpDummyThreadEvent + 966);
if( (_UNKNOWN *)*(&CmpDummyThreadEvent + 966) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 7728) )
break;
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&CmpDummyThreadEvent + 7776));
if( v9 )
v10 = -1073741670;
else
v10 = HalpIrtExtendApertureRange();
if( v10 < 0 )
return(unsigned int)v10;
++v9;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&CmpDummyThreadEvent + 7776));
}
v12 = **(&CmpDummyThreadEvent + 966);
if( *(_UNKNOWN **)(*(&CmpDummyThreadEvent + 966) + 8i64) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 7728)
|| *(_QWORD *)(v12 + 8) != *(&CmpDummyThreadEvent + 966)
|| (*(&CmpDummyThreadEvent + 966) = **(&CmpDummyThreadEvent + 966),
*(_QWORD *)(v12 + 8) = (char *)&CmpDummyThreadEvent + 7728,
*((_DWORD *)i + 6) = a1,
*((_DWORD *)i + 7) = a2,
*((_DWORD *)i + 5) = a3,
v13 = *(&CmpDummyThreadEvent + 896),
*(_UNKNOWN **)(*(&CmpDummyThreadEvent + 896) + 8i64) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 7168)) )
{
__fastfail(3u);
}
*i = *(&CmpDummyThreadEvent + 896);
i[1] = (__int64)&CmpDummyThreadEvent + 7168;
*(_QWORD *)(v13 + 8) = i;
*(&CmpDummyThreadEvent + 896) = i;
}
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&CmpDummyThreadEvent + 7776));
*a5 = *((_DWORD *)i + 4);
return(unsigned int)v10;
}Referenced by:
HalpIrtAllocateIndex
HalpIrtInitializeDeviceApertures