CmpDoReadTxRBigLogRecord
__int64 __fastcall CmpDoReadTxRBigLogRecord(void *a1, void *a2, ULONG a3, struct _PRIVILEGE_SET **a4, _DWORD *a5){
UINT8 *v5;
int v6;
_CHILD_LIST *v7;
unsigned int v8;
INT64 v9;
struct _PRIVILEGE_SET *v10;
UINT8 *v11;
int v12;
unsigned int v13;
__int64 v14;
unsigned int v16;
struct _PRIVILEGE_SET *v17;
PVOID ppvBuffer;
__int64 plsnRecord;
__int64 plsnPrevious;
__int64 plsnUndoNext;
ULONG pcbBuffer;
CLS_RECORD_TYPE peRecordType;
struct _PRIVILEGE_SET **v25;
v25 = a4;
ppvBuffer = a2;
v5 = (UINT8 *)a2;
plsnUndoNext = 0i64;
plsnPrevious = 0i64;
plsnRecord = 0i64;
peRecordType = 0;
pcbBuffer = a3;
v6 = CmpVerifyBigLogRecordChunk((INT64 *)a2, a3);
if( v6 >= 0 )
{
v8 = *((_DWORD *)v5 + 1);
v16 = *((_DWORD *)v5 + 12);
CmpAllocateTransientPoolWithTag((_HHIVE *)1, v8, 0x20204D43ui64, v7);
v10 = (struct _PRIVILEGE_SET *)v9;
if( v9 )
{
memset(v9, 0i64);
v11 = (UINT8 *)v10;
v12 = 0;
v13 = v8;
v17 = v10;
if( !*((_DWORD *)v5 + 13) )
{
do
{
v14 = *((unsigned int *)v5 + 14);
if( (unsigned int)v14 > v13 )
break;
memmove(v11, v5 + 64, (unsigned int)v14);
v17 = (struct _PRIVILEGE_SET *)((char *)v17 + v14);
v13 -= v14;
if( ++v12 >= v16 )
{
if( v13 )
break;
*v25 = v10;
v10 = 0i64;
v6 = 0;
*a5 = v8;
goto LABEL_11;
}
peRecordType = 1;
v6 = ClfsReadNextLogRecord(
a1,
&ppvBuffer,
&pcbBuffer,
&peRecordType,
0i64,
(PCLFS_LSN)&plsnUndoNext,
(PCLFS_LSN)&plsnPrevious,
(PCLFS_LSN)&plsnRecord);
if( v6 < 0 )
goto LABEL_11;
v5 = (UINT8 *)ppvBuffer;
v6 = CmpVerifyBigLogRecordChunk((INT64 *)ppvBuffer, pcbBuffer);
if( v6 < 0 )
goto LABEL_11;
v11 = (UINT8 *)v17;
}
while( *((_DWORD *)v5 + 13) == v12 );
}
v6 = -1073741762;
LABEL_11:
if( v10 )
CmSiFreeMemory(v10);
}
else
{
return(unsigned int)-1073741670;
}
}
return(unsigned int)v6;
}Referenced by:
CmpRmReDoPhase