HvpGenerateLogMetadata

NTSTATUS __fastcall HvpGenerateLogMetadata(_RTL_BITMAP *BitMapHeader, INT64 a2, UINT64 *a3){
  NTSTATUS v3; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned int v10; 
  NTSTATUS NextForwardRunClear; 
  int v12; 
  UINT64 StartingRunIndex; 

  v3 = 0;
  LODWORD(StartingRunIndex) = 0;
  v7 = HvpCountSetRangesInVector(BitMapHeader);
  v8 = v7;
  if( a2 && *(_DWORD *)a3 >= v7 )
  {
    v9 = 0;
    v10 = 0;
    if( BitMapHeader->SizeOfBitMap )
    {
      while( 1 )
      {
        NextForwardRunClear = RtlFindNextForwardRunClear((INT64)BitMapHeader, v9, &StartingRunIndex);
        if( !NextForwardRunClear )
          break;
        v12 = StartingRunIndex;
        if( (_DWORD)StartingRunIndex != v9 )
        {
          *(_DWORD *)(a2 + 8i64 * v10) = v9 << 9;
          *(_DWORD *)(a2 + 8i64 * v10++ + 4) = (v12 - v9) << 9;
        }
        v9 = v12 + NextForwardRunClear;
        if( v12 + NextForwardRunClear >= BitMapHeader->SizeOfBitMap )
          goto LABEL_10;
      }
      *(_DWORD *)(a2 + 8i64 * v10) = v9 << 9;
      *(_DWORD *)(a2 + 8i64 * v10 + 4) = (BitMapHeader->SizeOfBitMap - v9) << 9;
    }
  }
  else
  {
    v3 = -1073741789;
  }
LABEL_10:
  *(_DWORD *)a3 = v8;
  return v3;
}

Referenced by:

HvpApplyLegacyLogFile
HvpGenerateLogEntry
HvpGenerateLogEntryMetadata