SMKM_STORE_MGR::SmCompressCtxProcessReadyQueue
__int64 __fastcall SMKM_STORE_MGR::SmCompressCtxProcessReadyQueue(__int64 a1, __int64 a2, UINT8 a3, int a4){
__int64 v4;
INT64 *v6;
unsigned __int8 v7;
char v9;
__int64 *v10;
__int64 *v11;
__int64 result;
int v13;
unsigned __int64 v14;
__int64 v15;
unsigned __int64 *v16;
__int64 *v17;
__int64 v18;
_EX_RUNDOWN_REF *v19;
v4 = a1 + 96;
v6 = (INT64 *)(a1 + 112);
v7 = a3;
if( a3 == 0xFF )
v7 = ExAcquireSpinLockExclusive((INT64 *)(a1 + 112));
while( 1 )
{
v9 = 0;
if( !a4 && (**(_QWORD **)(v4 + 8) & 0xFFFFFFFFFFFFFFF8ui64) < 0x80 )
v9 = 4;
v10 = *(__int64 **)(v4 + 8);
if( v10 == (__int64 *)v4 )
{
v11 = 0i64;
}
else
{
v11 = *(__int64 **)v4;
*(_QWORD *)v4 = **(_QWORD **)v4 & 0xFFFFFFFFFFFFFFF8ui64;
if( v11 == v10 )
{
*(_QWORD *)v4 = 0i64;
*(_QWORD *)(v4 + 8) = v4;
}
else
{
*v10 = *v10 & 7 | (8 * (((unsigned __int64)*v10 >> 3) - 1));
}
}
ExReleaseSpinLockExclusiveFromDpcLevel(v6);
result = v7;
__writecr8(v7);
if( !v11 )
break;
v13 = SMKM_STORE_MGR::SmFeAddInitiate(
a2,
(_DWORD *)v11 + 6,
1,
*(_DWORD *)(v11[13] + 6016) & 0x3FF,
(unsigned __int64)v11,
(__int64 *)v11[4],
v9);
if( v13 < 0 )
{
if( v13 == -1073741739 )
{
v14 = (unsigned __int8)ExAcquireSpinLockExclusive(v6);
v15 = (**(_QWORD **)(v4 + 8) >> 3) + 1i64;
*v11 = *(_QWORD *)v4 | *(_DWORD *)v11 & 7;
v16 = *(unsigned __int64 **)(v4 + 8);
*(_QWORD *)v4 = v11;
if( v16 == (unsigned __int64 *)v4 )
{
*(_QWORD *)(v4 + 8) = v11;
v16 = (unsigned __int64 *)v11;
}
*v16 = *(_DWORD *)v16 & 7 | (unsigned __int64)(8 * v15);
ExReleaseSpinLockExclusiveFromDpcLevel(v6);
result = (unsigned int)KiIrqlFlags;
__writecr8(v14);
return result;
}
MmUnmapLockedPages(*(VOID **)(*(_QWORD *)v11[2] + 24i64), *(_MDL **)v11[2]);
v17 = (__int64 *)v11[4];
v18 = *v17;
*(_DWORD *)v17 = v13;
*(_QWORD *)(v11[4] + 8) = 0i64;
SmIoRequestComplete((__int64)v17, v11, v18, v11[4]);
v19 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(a2, *(_DWORD *)(v11[13] + 6016) & 0x3FF);
ExReleaseRundownProtection(v19 + 1);
ExFreePoolWithTag(v11, 0);
}
v7 = ExAcquireSpinLockExclusive(v6);
}
return result;
}
Referenced by:
No references.