CmpGenerateFlushControlData
CHAR __fastcall CmpGenerateFlushControlData(INT64 a1, CHAR a2, INT64 *a3){
int *v3;
char v7;
char v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
char v17;
int v18;
int v19;
int v20;
int v21;
int v22;
v3 = (int *)(a3 + 1);
*a3 = 0i64;
*((_DWORD *)a3 + 2) = 0;
*((_DWORD *)a3 + 5) = 0;
*((_DWORD *)a3 + 3) = 0;
v7 = *(_BYTE *)(a1 + 191);
if( !v7 && !*(_DWORD *)(a1 + 104) && !*(_DWORD *)(a1 + 128) )
{
v8 = 0;
LABEL_29:
v10 = 0;
if( !v7 )
goto LABEL_9;
goto LABEL_4;
}
v8 = 1;
if( !*(_DWORD *)(a1 + 104) )
goto LABEL_29;
LABEL_4:
v9 = 9;
*(_DWORD *)a3 = 9;
if( *(_BYTE *)(a1 + 190) )
{
v9 = 27;
*(_DWORD *)a3 = 27;
}
if( *(_DWORD *)(a1 + 4268) )
*(_DWORD *)a3 = v9 | 0x82;
*((_DWORD *)a3 + 6) = HvGetEffectiveLogSizeCapForHive((_HHIVE *)a1);
LABEL_9:
v11 = v10;
if( v8 && (a2 & 4) != 0 )
{
v11 = v10 | 0x42;
*(_DWORD *)a3 = v10 | 0x42;
}
v12 = *(_DWORD *)(a1 + 160);
if( (v12 & 2) == 0 )
{
LOBYTE(v12) = (*(&CmpDummyThreadEvent + 376) & 1) == 0;
if( (((*(_DWORD *)(a1 + 4152) & 0x800) == 0) & (unsigned __int8)v12) != 0 )
{
if( (a2 & 8) != 0 && (!*(_BYTE *)(a1 + 190) || (v11 & 0x10) != 0) )
{
v18 = v11 | 0x107;
*(_DWORD *)a3 = v18;
if( (v18 & 8) != 0 )
{
HvGetHiveLogFileStatus(a1, *((_DWORD *)a3 + 6), v3);
v12 = *v3;
if( (*v3 & 0xC) != 0 )
*(_DWORD *)a3 |= 0x400u;
}
return v12;
}
if( (v11 & 0x48) == 8 )
{
HvGetHiveLogFileStatus(a1, *((_DWORD *)a3 + 6), v3);
v12 = *v3;
if( (*v3 & 1) != 0 )
{
*(_DWORD *)a3 |= 2u;
return v12;
}
if( (v12 & 0xA) != 0 )
{
*(_DWORD *)a3 |= 0x42u;
}
else if( (v12 & 4) != 0 )
{
*(_DWORD *)a3 |= 2u;
if( HvIsCurrentLogSwappable((_HHIVE *)a1) )
v22 = v21 | 0x22;
else
v22 = v21 | 0x42;
*(_DWORD *)a3 = v22;
}
}
v13 = *(_DWORD *)a3;
if( (*(_DWORD *)a3 & 0x40) == 0 )
goto LABEL_20;
LOBYTE(v12) = PoIsInitializedStopWatch((_QWORD *)(a1 + 4248));
if( (_BYTE)v12 )
return v12;
if( (*v3 & 8) != 0 )
{
v13 = v15 | 0x504;
}
else
{
*(_DWORD *)a3 = v15 | 1;
if( HvIsCurrentLogSwappable((_HHIVE *)a1) )
{
v13 = v16 | 0x21;
}
else
{
v13 = v16 | 5;
*(_DWORD *)a3 = v13;
if( (v17 & 4) == 0 )
goto LABEL_20;
v13 |= 0x400u;
}
}
*(_DWORD *)a3 = v13;
LABEL_20:
if( (v13 & 0x48) == 8 )
{
v14 = v13;
if( !*(_DWORD *)(a1 + 128) )
{
v14 = v13 | 0x800;
*(_DWORD *)a3 = v13 | 0x800;
}
v13 = v14;
if( (*v3 & 0x14) != 0 )
{
v13 = v14 | 0x1000;
*(_DWORD *)a3 = v14 | 0x1000;
}
}
v12 = *(_DWORD *)(a1 + 4264);
if( (v12 & 1) == 0 )
{
if( *(_QWORD *)(a1 + 1536) )
{
LOBYTE(v12) = (a2 & 0x20) == 0;
if( (((v13 & 8) == 0) & (unsigned __int8)v12) == 0 )
*(_DWORD *)a3 = v13 | 0x202;
}
}
return v12;
}
}
if( *(_DWORD *)(a1 + 104) || *(_BYTE *)(a1 + 191) )
{
v19 = v11 | 0x46;
*(_DWORD *)a3 = v19;
if( *(_BYTE *)(a1 + 190) )
v19 |= 0x10u;
v20 = v19 | 0x500;
}
else
{
LOBYTE(v12) = (a2 & 0x20) != 0;
if( (((*(_BYTE *)(a1 + 4264) & 1) == 0) & (unsigned __int8)v12) == 0 )
return v12;
v20 = v11 | 0x202;
}
*(_DWORD *)a3 = v20;
return v12;
}Referenced by:
CmpFlushHive