MiGetUltraMdlContext

PSLIST_ENTRY __stdcall MiGetUltraMdlContext(){
  unsigned int v0; 
  unsigned __int64 v1; 
  __int64 v2; 
  PSLIST_ENTRY result; 
  _SLIST_ENTRY *Pool; 
  _SLIST_ENTRY *v5; 
  int v6; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  v0 = 0;
  v1 = __rdtsc() >> 4;
  v2 = 8i64 * KeGetCurrentPrcb()->ParentNode->Affinity.Reserved[0];
  do
  {
    LODWORD(v1) = v1 & 7;
    result = RtlpInterlockedPopEntrySList((PSLIST_HEADER)(*(&stru_140C4DB30 + 457) + ((v2 + (unsigned int)v1) << 6)));
    if( result )
      return result;
    LOBYTE(v1) = v1 + 1;
    ++v0;
  }
  while( v0 < 8 );
  if( *(&stru_140C4DB30 + 912) >= 0x80u )
    return 0i64;
  Pool = (_SLIST_ENTRY *)MiAllocatePool(64i64, 0x28ui64, 0x6D55694Dui64);
  v5 = Pool;
  if( !Pool )
    return 0i64;
  if( !MiCreateUltraThreadContextHelper((INT64)(&Pool->Next + 1), 3ui64, 0i64) )
  {
    ExFreePoolWithTag(v5, 0);
    return 0i64;
  }
  v6 = 0;
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 448, &LockHandle);
  if( *(&stru_140C4DB30 + 912) >= 0x80u )
    v6 = 1;
  else
    ++*(&stru_140C4DB30 + 912);
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( v6 )
  {
    MiDeleteUltraMapContext((INT64)(&v5->Next + 1), (_XSTATE_CONFIGURATION *)3);
    ExFreePoolWithTag(v5, 0);
    return 0i64;
  }
  return v5;
}

Referenced by:

MmMapMdl