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