MiExtendDynamicBitMap

NTSTATUS __stdcall MiExtendDynamicBitMap(
        PHANDLE TmHandle,
        _ACCESS_MASK DesiredAccess,
        POBJECT_ATTRIBUTES ObjectAttributes,
        PUNICODE_STRING LogFileName,
        UINT32 CreateOptions,
        UINT32 CommitStrength){
  _MI_SYSTEM_VA_TYPE v6; 
  _RTL_BITMAP_EX *v7; 
  unsigned __int64 SizeOfBitMap; 
  _BYTE *v10; 
  __int64 v11; 
  UINT64 v12; 
  unsigned __int64 v13; 
  UINT64 v14; 
  char *v16; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT64 NumberToClear; 
  _OBJECT_ATTRIBUTES *v19; 

  v19 = ObjectAttributes;
  v6 = (int)LogFileName;
  v7 = *(_RTL_BITMAP_EX **)&DesiredAccess;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( !CreateOptions )
  {
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)TmHandle + 8, &LockHandle);
    ObjectAttributes = v19;
  }
  SizeOfBitMap = v7->SizeOfBitMap;
  if( v7 != (_RTL_BITMAP_EX *)TmHandle && TmHandle[5] != (void *)SizeOfBitMap )
  {
LABEL_17:
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    return 1;
  }
  v10 = TmHandle[2];
  if( v6 == MiVaSystemPtes )
  {
    v10 -= (unsigned __int64)TmHandle[5];
  }
  else if( v6 == MiVaSystemPtesLarge )
  {
    v10 -= (unsigned __int64)*TmHandle;
  }
  if( SizeOfBitMap < (unsigned __int64)v10 )
  {
    if( v6 == MiVaSystemPtesLarge )
      v11 = -4096i64;
    else
      v11 = SizeOfBitMap >> 3;
    v12 = 0x8000i64;
    if( ObjectAttributes )
      v12 = (UINT64)ObjectAttributes;
    NumberToClear = v12;
    if( MiSplitBitmapPages(v6, (char *)v7->Buffer + v11, v12) == 1 )
    {
      v13 = v7->SizeOfBitMap;
      v14 = (UINT64)&v10[-SizeOfBitMap];
      if( NumberToClear + SizeOfBitMap <= (unsigned __int64)v10 )
        v14 = NumberToClear;
      v7->SizeOfBitMap = v13 + v14;
      if( v6 == MiVaSystemPtesLarge )
      {
        v13 = 0i64;
        v7->Buffer -= v14 >> 6;
        v16 = (char *)TmHandle[5];
        if( !v16 )
          TmHandle[6] = (void *)(((unsigned __int64)TmHandle[1] >> 21) & 0x7FFF);
        TmHandle[5] = &v16[v14];
      }
      RtlClearBitsEx(v7, v13, v14);
      if( CreateOptions )
        return 1;
      goto LABEL_17;
    }
  }
  if( !CreateOptions )
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( TmHandle == (PHANDLE)((char *)&stru_140C4DB30 + 968) )
      MiReclaimSystemVa(1ui64);
  }
  return 0;
}

Referenced by:

MiMarkSystemVaAllocated
MiObtainDynamicVa