ST_STORE::StUnlockAndUnmapRegion
void __fastcall ST_STORE::StUnlockAndUnmapRegion(__int64 a1, unsigned int a2, __int64 a3){
__int64 v3;
__int64 v5;
int v6;
__int64 v7;
__int64 v8;
__int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
__int64 v12;
__int64 v13;
unsigned __int64 v14;
unsigned __int64 v15;
int v16;
v3 = *(_QWORD *)(a1 + 800);
v5 = a2;
if( (*(_BYTE *)(v3 + 6021) & 4) != 0 )
{
SMKM_STORE::SmStUnmapVirtualRegion(v3, a2, a3, v3, v16, 1u);
}
else
{
v12 = *(_QWORD *)(v3 + 6216);
v13 = *(_QWORD *)(v12 + 8i64 * a2);
v14 = v13 & 0xFFFFFFFFFFFFFFFEui64;
v15 = v13 & 0xFFFFFFFFFFFFFFF8ui64;
*(_QWORD *)(v12 + 8 * v5) = v14;
if( (v14 & 3) == 0 )
SmFpFree(v3 + 6608, 5i64, (INT64)KeGetCurrentThread(), v15);
}
v6 = 0;
if( !*(_BYTE *)(a1 + 776) )
v6 = *(unsigned __int16 *)(*(_QWORD *)(a1 + 1032) + 2 * v5) >> 13;
v7 = *(_QWORD *)(a1 + 800);
if( (*(_BYTE *)(v7 + 6021) & 4) != 0 )
{
SMKM_STORE::SmStUnmapVirtualRegion(v7, v5, a3, v7, v16, (16 * v6) | 4);
}
else
{
v8 = *(_QWORD *)(v7 + 6216);
v9 = *(_QWORD *)(v8 + 8 * v5);
v10 = v9 & 0xFFFFFFFFFFFFFFFDui64;
v11 = v9 & 0xFFFFFFFFFFFFFFF8ui64;
*(_QWORD *)(v8 + 8 * v5) = v10;
if( (v10 & 3) == 0 )
SmFpFree(v7 + 6608, 5i64, (INT64)KeGetCurrentThread(), v11);
}
}
Referenced by:
No references.