CmpDoReadTxRBigLogRecord
__int64 __fastcall CmpDoReadTxRBigLogRecord(void *a1, void *a2, unsigned int a3, _PRIVILEGE_SET **a4, size_t *a5){
_DWORD *v5;
int v6;
size_t v7;
_PRIVILEGE_SET *TransientPoolWithTag;
_PRIVILEGE_SET *v9;
_PRIVILEGE_SET *v10;
int v11;
unsigned int v12;
__int64 v13;
unsigned int v15;
_PRIVILEGE_SET *v16;
PVOID ppvBuffer;
_CLS_LSN plsnRecord;
_CLS_LSN plsnPrevious;
_CLS_LSN plsnUndoNext;
unsigned int pcbBuffer;
unsigned __int8 peRecordType;
_PRIVILEGE_SET **v24;
v24 = a4;
ppvBuffer = a2;
v5 = a2;
plsnUndoNext.ullOffset = 0i64;
plsnPrevious.ullOffset = 0i64;
plsnRecord.ullOffset = 0i64;
peRecordType = 0;
pcbBuffer = a3;
v6 = CmpVerifyBigLogRecordChunk((INT64 *)a2, a3);
if( v6 >= 0 )
{
v7 = v5[1];
v15 = v5[12];
TransientPoolWithTag = (_PRIVILEGE_SET *)CmpAllocateTransientPoolWithTag(1ui64, v7);
v9 = TransientPoolWithTag;
if( TransientPoolWithTag )
{
memset(TransientPoolWithTag, 0i64, v7);
v10 = v9;
v11 = 0;
v12 = v7;
v16 = v9;
if( !v5[13] )
{
do
{
v13 = (unsigned int)v5[14];
if( (unsigned int)v13 > v12 )
break;
memmove(v10, v5 + 16, v13);
v16 = (_PRIVILEGE_SET *)((char *)v16 + v13);
v12 -= v13;
if( ++v11 >= v15 )
{
if( v12 )
break;
*v24 = v9;
v9 = 0i64;
v6 = 0;
*a5 = v7;
goto LABEL_11;
}
peRecordType = 1;
v6 = ClfsReadNextLogRecord(
a1,
&ppvBuffer,
&pcbBuffer,
&peRecordType,
0i64,
&plsnUndoNext,
&plsnPrevious,
&plsnRecord);
if( v6 < 0 )
goto LABEL_11;
v5 = ppvBuffer;
v6 = CmpVerifyBigLogRecordChunk((INT64 *)ppvBuffer, pcbBuffer);
if( v6 < 0 )
goto LABEL_11;
v10 = v16;
}
while( v5[13] == v11 );
}
v6 = -1073741762;
LABEL_11:
if( v9 )
CmSiFreeMemory(v9);
}
else
{
return(unsigned int)-1073741670;
}
}
return(unsigned int)v6;
}Referenced by:
CmpRmReDoPhase