MiPopulateCfgBitMap
__int64 __fastcall MiPopulateCfgBitMap(
_QWORD *a1,
unsigned __int64 a2,
__int64 a3,
int a4,
unsigned __int64 a5,
__int64 a6){
INT64 v6;
UINT64 *v7;
volatile signed __int64 *v9;
UINT64 Src;
INT64 v13;
unsigned int v14;
UINT64 v16;
__int128 v17;
int v18;
v6 = a1[2];
v7 = (UINT64 *)&v17;
v18 = 0;
v9 = (volatile signed __int64 *)(v6 + 40);
Src = *a1 + ((2 * (a5 >> 4)) >> 3);
v17 = 0i64;
if( a2 <= 1 )
v7 = 0i64;
ExAcquirePushLockExclusiveEx(v6 + 40, 0i64);
if( (unsigned int)MiVadDeleted(v6) )
{
if( (_InterlockedExchangeAdd64(v9, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v6 + 40));
KeAbPostRelease((PVOID)(v6 + 40));
return 3221225738i64;
}
else
{
LODWORD(v16) = 0;
v14 = MiCopyToCfgBitMap((INT64)a1, a2, v13, (unsigned int)a4, Src, v6, v16, v7, (2 * ((a6 - a5) >> 4)) >> 3);
if( (_InterlockedExchangeAdd64(v9, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)(v6 + 40));
KeAbPostRelease((PVOID)(v6 + 40));
return v14;
}
}Referenced by:
MiCfgMarkValidEntries
MiMarkPrivateImageCfgBits
MiMarkPrivateOpenCfgBits