SmcStoreSlotReserve

_SMC_STORE_ENTRY *__stdcall SmcStoreSlotReserve(_SMC_CACHE *Cache, UINT64 RegionIndex, UINT64 RegionCount){
  unsigned __int64 v4; 
  unsigned int v5; 
  _SMC_STORE_ENTRY *v6; 
  _PRIVILEGE_SET *v7; 
  _PRIVILEGE_SET *v8; 
  _PRIVILEGE_SET *p_Control; 
  _ETHREAD *CurrentThread; 
  _SMC_CACHE *v11; 
  _SMC_CACHE v12; 

  v4 = ((unsigned __int64)(unsigned int)Cache[2] + 31) >> 5;
  v5 = RegionCount;
  v6 = 0i64;
  LODWORD(v7) = SSHSupportAllocateNonPaged(4 * v4, 0x72436D73u);
  v8 = v7;
  if( !v7 )
    return v6;
  p_Control = v7;
  if( v4 )
  {
    if( ((unsigned __int8)v7 & 4) != 0 )
    {
      v7->PrivilegeCount = -1;
      if( !--v4 )
        goto LABEL_8;
      p_Control = (_PRIVILEGE_SET *)&v7->Control;
    }
    memset(p_Control, 0xFFu, 8 * (v4 >> 1));
    if( (v4 & 1) != 0 )
      *((_DWORD *)p_Control + v4 - 1) = -1;
  }
LABEL_8:
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v11 = Cache + 42;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)Cache + 20, 0i64);
  while( v11 < Cache + 138 )
  {
    if( *v11 == -1 )
    {
      v12 = v11[1];
      if( (v12 & 4) == 0 )
      {
        *((_QWORD *)v11 + 1) = v8;
        v11[1] = v12 | 4;
        v8 = 0i64;
        if( SmcStorePlacementGet(Cache, v5, v11) >= 0 )
        {
          v6 = v11;
          v11 = 0i64;
        }
        if( v11 )
        {
          SmcStoreSlotAbort(Cache, v11, 1ui64);
          return v6;
        }
        break;
      }
    }
    v11 += 6;
  }
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Cache + 20, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((_EX_PUSH_LOCK *)Cache + 20);
  KeAbPostRelease(Cache + 40);
  KeLeaveCriticalRegion();
  if( v8 )
    CmSiFreeMemory(v8);
  return v6;
}

Referenced by:

SmcStoreCreate