SmcStoreSlotReserve

unsigned __int64 __fastcall SmcStoreSlotReserve(__int64 a1, __int64 a2, ULONG a3){
  unsigned __int64 v4; 
  unsigned __int64 v6; 
  INT64 NonPaged; 
  struct _PRIVILEGE_SET *v8; 
  void *v9; 
  _ETHREAD *CurrentThread; 
  unsigned __int64 v11; 
  int v12; 
  v4 = ((unsigned __int64)*(unsigned int *)(a1 + 8) + 31) >> 5;
  v6 = 0i64;
  NonPaged = SSHSupportAllocateNonPaged(4 * v4, 0x72436D73u);
  v8 = (struct _PRIVILEGE_SET *)NonPaged;
  if( !NonPaged )
    return v6;
  v9 = (void *)NonPaged;
  if( v4 )
  {
    if( (NonPaged & 4) != 0 )
    {
      *(_DWORD *)NonPaged = -1;
      if( !--v4 )
        goto LABEL_8;
      v9 = (void *)(NonPaged + 4);
    }
    memset(v9, 0xFFu, 8 * (v4 >> 1));
    if( (v4 & 1) != 0 )
      *((_DWORD *)v9 + v4 - 1) = -1;
  }
LABEL_8:
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v11 = a1 + 168;
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx(a1 + 160, 0i64);
  while( v11 < a1 + 552 )
  {
    if( *(_DWORD *)v11 == -1 )
    {
      v12 = *(_DWORD *)(v11 + 4);
      if( (v12 & 4) == 0 )
      {
        *(_QWORD *)(v11 + 8) = v8;
        *(_DWORD *)(v11 + 4) = v12 | 4;
        v8 = 0i64;
        if( (int)SmcStorePlacementGet(a1, a3, v11) >= 0 )
        {
          v6 = v11;
          v11 = 0i64;
        }
        if( v11 )
        {
          SmcStoreSlotAbort(a1, v11, 1);
          return v6;
        }
        break;
      }
    }
    v11 += 24i64;
  }
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(a1 + 160), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)(a1 + 160));
  KeAbPostRelease((PVOID)(a1 + 160));
  KeLeaveCriticalRegion();
  if( v8 )
    CmSiFreeMemory(v8);
  return v6;
}

Referenced by:

SmcStoreCreate