MiConvertRunsToPages

UINT64 *__stdcall MiConvertRunsToPages(PHYSICAL_EXTENTS_DESCRIPTOR *FilesystemExtents, UINT64 *NumberOfPages){
  unsigned int *v2; 
  unsigned int v4; 
  UINT64 v5; 
  unsigned int *v6; 
  ULONG NumberOfValidRuns; 
  PHYSICAL_MEMORY_RUN *Run; 
  __int64 v10; 
  unsigned __int64 PageCount; 
  unsigned int v12; 
  __int64 *v13; 
  unsigned __int64 v14; 
  unsigned int v15; 
  unsigned int v16; 
  UINT64 *result; 
  UINT64 *v18; 
  ULONG v19; 
  __int64 v20; 
  unsigned __int64 *p_PageCount; 
  __int64 v22; 
  unsigned __int64 v23; 
  unsigned __int64 i; 
  unsigned __int64 v25; 
  v4 = 0;
  v5 = 0i64;
  v6 = v2;
  NumberOfValidRuns = FilesystemExtents->NumberOfValidRuns;
  if( NumberOfValidRuns )
  {
    Run = FilesystemExtents->Run;
    v10 = NumberOfValidRuns;
    do
    {
      PageCount = Run->PageCount;
      v5 += PageCount;
      if( v4 <= 1 )
      {
        if( Run->BasePage == 0x8000000000000000ui64 )
        {
          v4 = -1;
        }
        else
        {
          v12 = 0;
          v13 = MiLargePageSizes;
          do
          {
            v14 = *v13;
            if( !(Run->BasePage % *v13) && !(PageCount % v14) )
              break;
            v15 = v12 + 1;
            v16 = v12 + 1;
            if( v4 > v12 )
              v16 = v4;
            v4 = v16;
            if( v14 == 512 )
              break;
            ++v13;
            ++v12;
          }
          while( v15 < 3 );
        }
      }
      ++Run;
      --v10;
    }
    while( v10 );
    if( v4 > 1 )
      v4 = -1;
  }
  *NumberOfPages = v5;
  *v6 = v4;
  LODWORD(result) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v18 = result;
  if( result )
  {
    v19 = FilesystemExtents->NumberOfValidRuns;
    v20 = 0i64;
    if( v19 )
    {
      p_PageCount = &FilesystemExtents->Run[0].PageCount;
      v22 = v19;
      do
      {
        v23 = *p_PageCount;
        for( i = *(p_PageCount - 1); v23; --v23 )
        {
          v18[v20] = i;
          v25 = i + 1;
          ++v20;
          if( i == 0x8000000000000000ui64 )
            v25 = 0x8000000000000000ui64;
          i = v25;
        }
        p_PageCount += 2;
        --v22;
      }
      while( v22 );
    }
    return v18;
  }
  return result;
}

Referenced by:

MiAllocateFileExtents