HvpRemapAndEnlistHiveBins

INT64 __fastcall HvpRemapAndEnlistHiveBins(ULONG_PTR BugCheckParameter2){
  void *v1; 
  UINT8 *v2; 
  unsigned int v3; 
  unsigned int v4; 
  char v5; 
  unsigned int v7; 
  unsigned int i; 
  _HBIN *v9; 
  INT64 v10; 
  unsigned int Size; 
  int v12; 
  int v13; 
  INT64 v15; 
  _HBIN *v16; 
  INT64 v17; 
  unsigned int v18; 
  int v19; 
  unsigned int j; 
  UINT8 *v21; 
  void *v22; 
  INT64 v23; 
  int v24; 
  void *v25; 
  unsigned int v26; 
  INT64 TemporaryBin; 
  INT64 a4; 
  INT64 CellMap; 
  a4 = 0i64;
  v2 = 0i64;
  v3 = *(_DWORD *)(BugCheckParameter2 + 272);
  v4 = 0;
  v5 = 0;
  TemporaryBin = 0i64;
  v26 = v3;
  if( (*(_DWORD *)(BugCheckParameter2 + 160) & 0x20000) != 0 )
    v7 = *(_DWORD *)(BugCheckParameter2 + 224) - 4096;
  else
    v7 = 0;
  for( i = 0; i < v7; v3 = v26 )
  {
    CellMap = HvpGetCellMap(BugCheckParameter2, i);
    v9 = (_HBIN *)(*(_QWORD *)(CellMap + 8) & 0xFFFFFFFFFFFFFFF0ui64);
    if( !(unsigned __int8)HvpValidateLoadedBin(v9, i, v3) )
    {
      if( !BYTE3(NlsMbCodePageTag) && (CmpBootType & 6) == 0 )
        return(unsigned int)-1073741492;
      if( !HvpMarkDirty(BugCheckParameter2, v10, 4096i64) )
        return(unsigned int)-1073741670;
      memset((INT64)v9, 0i64);
      v9->Size = 4096;
      v9->Signature = 1852400232;
      v9->FileOffset = i & 0x7FFFFFFF;
      v5 = 1;
      v9[1].Signature = 4064;
    }
    Size = v9->Size;
    if( Size != 4096 )
    {
      v4 = v9->Size;
      if( i + Size > v7 )
        break;
      v13 = HvpViewMapPromoteRangeToMapping(BugCheckParameter2 + 216, i, Size, &a4);
      if( v13 < 0 )
        return(unsigned int)v13;
      HvpPointMapEntriesToBuffer(BugCheckParameter2, a4, v4, i, 0, 0i64);
      v9 = (_HBIN *)(*(_QWORD *)(CellMap + 8) & 0xFFFFFFFFFFFFFFF0ui64);
    }
    v12 = HvpEnlistFreeCells(BugCheckParameter2, (INT64)v9, i, 0i64);
    v13 = v12;
    if( v12 == 1073741833 )
    {
      v5 = 1;
    }
    else if( v12 < 0 )
    {
      return(unsigned int)v13;
    }
    i += v9->Size;
  }
  while( i < v3 )
  {
    v15 = HvpGetCellMap(BugCheckParameter2, i);
    v16 = (_HBIN *)(*(_QWORD *)(v15 + 8) & 0xFFFFFFFFFFFFFFF0ui64);
    if( !(unsigned __int8)HvpValidateLoadedBin(v16, i, v3) )
    {
      if( !BYTE3(NlsMbCodePageTag) && (CmpBootType & 6) == 0 )
        return(unsigned int)-1073741492;
      if( !HvpMarkDirty(BugCheckParameter2, v17, 4096i64) )
        return(unsigned int)-1073741670;
      memset((INT64)v16, 0i64);
      v16->Size = 4096;
      v16->Signature = 1852400232;
      v16->FileOffset = i & 0x7FFFFFFF;
      v5 = 1;
      v16[1].Signature = 4064;
    }
    v18 = v16->Size;
    if( v18 != 4096 )
    {
      v4 = v16->Size;
      v19 = HvpAllocateBin(BugCheckParameter2, v18, 0i64, 0x31334D43ui64, &TemporaryBin);
      v2 = (UINT8 *)TemporaryBin;
      v13 = v19;
      if( v19 < 0 )
        goto LABEL_12;
      for( j = 0; j < v4; *(_DWORD *)(v15 + 16) = 0 )
      {
        v15 = HvpGetCellMap(BugCheckParameter2, j + i);
        v21 = (UINT8 *)(*(_QWORD *)(v15 + 8) & 0xFFFFFFFFFFFFFFF0ui64);
        memmove(&v2[j], v21, 0x1000ui64);
        if( (*(_BYTE *)(v15 + 8) & 8) != 0 )
          HvpFreeBin((_HHIVE *)BugCheckParameter2, 0x1000u, (HSTORAGE_TYPE)v21, v22, v25);
        else
          CmpReleaseGlobalQuota(0x1000ui64);
        j += 4096;
        *(_QWORD *)v15 = 0i64;
        *(_QWORD *)(v15 + 8) = 0i64;
      }
      if( !HvIsRangeDirty(BugCheckParameter2, i, v4) )
      {
        v13 = HvpProtectBin(v23, v4, v2, 0);
        if( v13 < 0 )
          goto LABEL_12;
      }
      HvpPointMapEntriesToBuffer(BugCheckParameter2, (INT64)v2, v4, i, 1, 0i64);
      v16 = (_HBIN *)(*(_QWORD *)(v15 + 8) & 0xFFFFFFFFFFFFFFF0ui64);
      v2 = 0i64;
      TemporaryBin = 0i64;
    }
    v24 = HvpEnlistFreeCells(BugCheckParameter2, (INT64)v16, i, 0i64);
    v13 = v24;
    if( v24 == 1073741833 )
    {
      v5 = 1;
    }
    else if( v24 < 0 )
    {
      return(unsigned int)v13;
    }
    i += v16->Size;
    v3 = v26;
  }
  if( v5 )
    return 1073741833;
  v13 = 0;
LABEL_12:
  if( v2 )
    HvpFreeBin((_HHIVE *)BugCheckParameter2, v4, (HSTORAGE_TYPE)v2, v1, v25);
  return(unsigned int)v13;
}

Referenced by:

No references.