SMKM_STORE::SmStPrioritizeRegionsStore

__int64 __fastcall SMKM_STORE::SmStPrioritizeRegionsStore(__int64 a1, __int64 *a2){
  bool v2; 
  __int64 *v3; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int v7; 
  _ETHREAD *CurrentThread; 
  volatile signed __int64 *v9; 
  __int64 v10; 
  unsigned int v11; 
  unsigned int v12; 
  int v13; 
  char *v14; 
  SIZE_T v15; 
  char *v16; 
  __int64 v17; 
  char *v18; 
  char *v19; 
  char *v20; 
  unsigned __int64 v21; 
  char *v22; 
  char *v23; 
  unsigned int v24; 
  unsigned __int64 v25; 
  __int64 v26; 
  __int64 v27; 
  __int64 v28; 
  UINT64 v29; 
  UINT64 v30; 
  SIZE_T v31; 
  _ETHREAD *v32; 
  __int64 v33; 
  __int64 v34; 
  int MemoryInformationLength; 
  unsigned int v37; 
  unsigned int v38; 
  unsigned int v39; 
  _KAPC_STATE ApcState; 
  _MEMORY_RANGE_ENTRY VirtualAddresses[32]; 
  char MemoryInformation[8]; 
  char v44; 
  v2 = (*(_BYTE *)(a1 + 6021) & 4) == 0;
  memset(&ApcState, 0, sizeof(ApcState));
  v3 = a2;
  if( v2 )
    return(unsigned int)-1073741637;
  v6 = *(_DWORD *)(a1 + 1952);
  v5 = 0;
  v38 = v6;
  if( !v6 )
    return v5;
  v7 = *(_DWORD *)(a1 + 6208) >> 12;
  v37 = v7;
  KiStackAttachProcess(*(_KPROCESS **)(a1 + 6584), 0i64, &ApcState);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 243);
  v9 = (volatile signed __int64 *)(a1 + 6024);
  ExAcquirePushLockSharedEx(a1 + 6024, 0i64);
  _InterlockedIncrement((volatile signed __int32 *)(a1 + 6596));
  v11 = 0;
  v12 = 0;
  if( !*(_DWORD *)(a1 + 6212) )
    goto LABEL_43;
  do
  {
    if( v11 >= v6 )
      break;
    if( (*(_QWORD *)(*(_QWORD *)(a1 + 6216) + 8i64 * v12) & 0x7FFFFFFFFFFF0000i64) == 0 )
      goto LABEL_42;
    v13 = *(_BYTE *)(a1 + 856) ? 0 : *(unsigned __int16 *)(*(_QWORD *)(a1 + 1112) + 2i64 * v12) >> 13;
    if( v13 != 6 )
      goto LABEL_42;
    v39 = v11 + 1;
    v14 = (char *)SMKM_STORE::SmStMapVirtualRegion(a1, v12, 0, v10, 0);
    if( (unsigned __int64)v14 <= 3 )
      goto LABEL_41;
    if( _InterlockedCompareExchange64(v9, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((INT64 *)(a1 + 6024));
    KeAbPostRelease((PVOID)(a1 + 6024));
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    if( !*v3 )
    {
      v15 = *(unsigned int *)(a1 + 6208);
      VirtualAddresses[0].VirtualAddress = v14;
      VirtualAddresses[0].NumberOfBytes = v15;
      MmSetPriorityVaRanges(1ui64, VirtualAddresses, 5ui64);
      goto LABEL_40;
    }
    v16 = v14;
    v17 = v7 << 12;
    v18 = &v14[v17];
    v19 = MemoryInformation;
    if( v14 < &v14[v17] )
    {
      do
      {
        *(_QWORD *)v19 = v16;
        v16 += 4096;
        v19 += 16;
      }
      while( v16 < v18 );
    }
    if( ZwQueryVirtualMemory(
           (PVOID)0xFFFFFFFFFFFFFFFFi64,
           v14,
           MemoryWorkingSetExList,
           MemoryInformation,
           16i64 * v37,
           0i64) < 0
      && v14 < v18 )
    {
      v20 = &v44;
      v21 = ((unsigned __int64)(v17 - 1) >> 12) + 1;
      do
      {
        *(_QWORD *)v20 = *(_QWORD *)v20 & 0xFFFFFFFFF8FFFFFEui64 | 0x6000001;
        v20 += 16;
        --v21;
      }
      while( v21 );
    }
    v22 = MemoryInformation;
    v23 = v14;
    v24 = 0;
    if( v14 >= v18 )
    {
      v3 = a2;
      goto LABEL_39;
    }
    do
    {
      if( (*((_QWORD *)v22 + 1) & 1) != 0 || (*((_QWORD *)v22 + 1) & 0xC00000i64) == 0x400000 )
      {
        v3 = a2;
        v25 = *((_QWORD *)v22 + 1) & 0x7000000i64;
        if( v25 == 100663296 )
        {
          if( !*a2 )
          {
            v31 = *(unsigned int *)(a1 + 6208);
            v30 = 5i64;
            VirtualAddresses[0].VirtualAddress = v14;
            VirtualAddresses[0].NumberOfBytes = v31;
            v29 = 1i64;
            goto LABEL_37;
          }
          v26 = *a2 - 1;
          goto LABEL_28;
        }
        if( v25 < 0x6000000 )
        {
          v27 = *a2;
          if( *a2 )
          {
            v28 = v24++;
            VirtualAddresses[v28].VirtualAddress = *(PVOID *)v22;
            v26 = v27 - 1;
            VirtualAddresses[v28].NumberOfBytes = 4096i64;
LABEL_28:
            *a2 = v26;
          }
        }
      }
      else
      {
        v3 = a2;
      }
      v23 += 4096;
      v22 += 16;
    }
    while( v23 < v18 );
    if( !v24 )
      goto LABEL_39;
    v29 = v24;
    v30 = 6i64;
LABEL_37:
    MmSetPriorityVaRanges(v29, VirtualAddresses, v30);
LABEL_39:
    v7 = v37;
LABEL_40:
    v32 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v32 + 243);
    ExAcquirePushLockSharedEx(a1 + 6024, 0i64);
    SMKM_STORE::SmStUnmapVirtualRegion(a1, v12, v33, v34, MemoryInformationLength, 0);
LABEL_41:
    v11 = v39;
    v6 = v38;
LABEL_42:
    ++v12;
  }
  while( v12 < *(_DWORD *)(a1 + 6212) );
LABEL_43:
  if( _InterlockedCompareExchange64(v9, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)(a1 + 6024));
  KeAbPostRelease((PVOID)(a1 + 6024));
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  _InterlockedAdd((volatile signed __int32 *)(a1 + 6596), 0xFFFFFFFF);
  KiUnstackDetachProcess(&ApcState, 0i64);
  return v5;
}

Referenced by:

No references.