CmpDoFileSetSizeEx

INT64 __fastcall CmpDoFileSetSizeEx(INT64 a1, UINT64 a2, UINT64 a3, CHAR a4){
  unsigned int v5; 
  VOID *v6; 
  unsigned __int64 v7; 
  unsigned __int64 v9; 
  UINT8 v10; 
  NTSTATUS v11; 
  int v12; 
  unsigned __int64 FileInformation; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  unsigned __int64 v15; 
  FileInformation = 0i64;
  v15 = 0i64;
  v5 = a2;
  IoStatusBlock = 0i64;
  v6 = *(VOID **)(a1 + 8i64 * (unsigned int)a2 + 1536);
  if( !v6 )
    return 0i64;
  if( (_DWORD)a2 )
    v7 = (unsigned int)(a2 - 4) <= 1 || (_DWORD)a2 == 1 ? *(_QWORD *)(a1
                                                                    + 8i64
                                                                    * (unsigned int)HvpLogTypeToLogArrayIndex((unsigned int)a2)
                                                                    + 1800) : 0i64;
  else
    v7 = *(_QWORD *)(a1 + 1792);
  if( (a4 & 1) != 0 && v7 && a3 <= v7 )
    return 0i64;
  v9 = CmpAdjustRequestedFileSize((unsigned int *)a1, v5, v7, a3);
  v10 = IoSetThreadHardErrorMode(0);
  if( v9 < v7 )
  {
    v15 = v9;
    v11 = ZwSetInformationFile(v6, &IoStatusBlock, &v15, 8ui64, FileAllocationInformation);
  }
  else
  {
    FileInformation = v9;
    v11 = ZwSetInformationFile(v6, &IoStatusBlock, &FileInformation, 8ui64, FileEndOfFileInformation);
  }
  v12 = v11;
  if( v11 < 0 )
    goto LABEL_24;
  if( v5 )
  {
    if( v5 - 4 <= 1 || v5 == 1 )
      *(_QWORD *)(a1 + 8i64 * (unsigned int)HvpLogTypeToLogArrayIndex(v5) + 1800) = v9;
  }
  else
  {
    *(_QWORD *)(a1 + 1792) = v9;
  }
  if( v12 < 0 )
  {
LABEL_24:
    CmRegistryIODebug = 3;
    qword_140D2DA98 = (__int64)v6;
    dword_140D2DAA0 = v12;
  }
  IoSetThreadHardErrorMode(v10);
  return(unsigned int)v12;
}

Referenced by:

CmShutdownSystem
CmpCompleteUnloadKey
CmpLoadHiveThread
CmpMountPreloadedHives
HvTruncateAllLogFilesIfRequired
HvTruncateCurrentLogFileIfRequired
HvWriteExternal
HvWriteLogFile
HvpAddBin
HvpPerformLogFileRecovery