MiAddPartitionDataToCrashDump

NTSTATUS __stdcall MiAddPartitionDataToCrashDump(_MM_KERNEL_DUMP_CONTEXT *Context){
  unsigned int v1; 
  int v3; 
  unsigned int v4; 
  int v5; 
  int v6; 
  __int64 v7; 
  unsigned int v8; 
  unsigned int v9; 
  _QWORD *v10; 
  __int64 i; 
  unsigned __int64 v12; 
  unsigned int v13; 
  unsigned int v14; 

  v1 = 0;
  v3 = MmAddRangeToCrashDump(Context, *(&stru_140C4DB30 + 267), 8ui64);
  if( v3 >= 0 )
  {
    v3 = MmAddRangeToCrashDump(Context, *(&stru_140C4DB30 + 263), 0x10ui64);
    if( v3 >= 0 )
    {
      v3 = MmAddRangeToCrashDump(
             Context,
             *(VOID **)(*(&stru_140C4DB30 + 263) + 8i64),
             8
           * (((unsigned __int64)(unsigned int)**(&stru_140C4DB30 + 263) >> 6)
            + ((**(&stru_140C4DB30 + 263) & 0x3F) != 0)));
      if( v3 >= 0 )
      {
        do
        {
          v4 = v1 < **(&stru_140C4DB30 + 263) ? v1 : 0;
          v5 = **(&stru_140C4DB30 + 263) - 1;
          v6 = (*(_DWORD *)(*(&stru_140C4DB30 + 263) + 8i64) & 4) != 0i64 ? 0x20 : 0;
          v7 = *(_QWORD *)(*(&stru_140C4DB30 + 263) + 8i64)
             - ((*(_QWORD *)(*(&stru_140C4DB30 + 263) + 8i64) & 4i64) != 0 ? 4 : 0);
          while( 1 )
          {
            v8 = v6 + v5;
            if( v5 - v4 == -1 )
              goto LABEL_6;
            v10 = (_QWORD *)(v7 + 8 * ((unsigned __int64)(v6 + v4) >> 6));
            for( i = ~*v10 | ((1i64 << ((v6 + v4) & 0x3F)) - 1); i == -1; i = ~*v10 )
            {
              if( (unsigned __int64)++v10 > v7 + 8 * ((unsigned __int64)v8 >> 6) )
                goto LABEL_6;
            }
            _BitScanForward64(&v12, ~i);
            v9 = v12 + ((unsigned int)(((__int64)v10 - v7) >> 3) << 6);
            if( v9 > v8 )
            {
LABEL_6:
              v9 = -1;
            }
            else if( v9 != -1 )
            {
              break;
            }
            if( !v4 )
              break;
            v13 = v1 + 1;
            if( v1 + 1 > **(&stru_140C4DB30 + 263) )
              v13 = **(&stru_140C4DB30 + 263);
            v5 = v13 - 1;
            v4 = 0;
          }
          v14 = v9 - v6;
          if( v9 == -1 )
            v14 = -1;
          if( v14 < v1 )
            break;
          if( v14 == -1 )
            break;
          v1 = v14 + 1;
          v3 = MiAddPartitionToCrashDump(Context, *(_MI_PARTITION **)(*(&stru_140C4DB30 + 267) + 8i64 * v14));
        }
        while( v3 >= 0 );
        if( v3 >= 0 )
        {
          if( *(&stru_140C4DB30 + 271) )
            v3 = MmAddRangeToCrashDump(
                   Context,
                   *(&stru_140C4DB30 + 271),
                   8 * ((*(&stru_140C4DB30 + 270) >> 6) + ((*(&stru_140C4DB30 + 2160) & 0x3F) != 0)));
          if( v3 >= 0 && *(&stru_140C4DB30 + 272) )
            return MmAddRangeToCrashDump(Context, *(&stru_140C4DB30 + 272), 0x200000ui64);
        }
      }
    }
  }
  return v3;
}

Referenced by:

MmAddPrivateDataToCrashDump