SMKM_STORE::SmStReleaseVirtualRegion

__int64 __fastcall SMKM_STORE::SmStReleaseVirtualRegion(__int64 a1, unsigned int a2, char a3){
  UINT64 v3; 
  _QWORD *v6; 
  void *v7; 
  int v8; 
  int v9; 
  __int64 v10; 
  __int64 result; 
  __int128 v12; 
  __int128 v13; 
  __int128 v14; 
  v3 = *(unsigned int *)(a1 + 6208);
  v6 = (_QWORD *)(*(_QWORD *)(a1 + 6216) + 8i64 * a2);
  v7 = (void *)(*v6 & 0x7FFFFFFFFFFF0000i64);
  if( (a3 & 2) != 0 && !v7 )
    return 1075380276i64;
  v8 = 1;
  v9 = a3 & 1;
  if( (*(_WORD *)v6 & 0x4000) != 0 )
    *(_WORD *)v6 &= ~0x4000u;
  else
    SMKM_STORE::SmStCheckLockInProgressRegionComplete(a1, (__int64)v6, v9);
  if( SMKM_STORE::SmStIsRegionBusy(a1, a2) )
    return 3221225646i64;
  if( (__int64)*v6 >= 0 )
  {
    v8 = 0;
    MmStoreDecommitVirtualMemory(v7, v3);
  }
  if( *(__int16 *)v6 < 0 )
    return 3221225646i64;
  v10 = *v6;
  *v6 = 0i64;
  *(_QWORD *)&v12 = v7;
  v13 = 0i64;
  *((_QWORD *)&v12 + 1) = v3;
  LODWORD(v13) = v8 | _mm_cvtsi128_si32((__m128i)0i64) & 0xFFFFFFFE;
  v14 = 0i64;
  result = SMKM_STORE::SmStHelperSendCommand(a1, 3, &v12, v9 != 0 ? 11 : 8);
  if( (_DWORD)result != -1073741650 )
    return 0i64;
  *v6 = v10;
  return result;
}

Referenced by:

No references.