PfpFlushBuffers
UINT8 __stdcall PfpFlushBuffers(){
_MM_PAGE_ACCESS_INFO_HEADER *v0;
_MM_PAGE_ACCESS_INFO *v1;
_MM_PAGE_ACCESS_INFO_HEADER *v2;
_MM_PAGE_ACCESS_INFO_HEADER *Next;
_MM_PAGE_ACCESS_INFO_HEADER **v4;
_MM_PAGE_ACCESS_INFO_HEADER *v5;
_MM_PAGE_ACCESS_INFO_HEADER *v6;
_MM_PAGE_ACCESS_INFO_HEADER *v7;
unsigned __int64 v8;
unsigned __int64 v9;
__int64 Process;
__int64 FirstFileEntry;
__int64 EmptyTime;
unsigned __int64 EmptyTime_high;
int v14;
_MM_PAGE_ACCESS_INFO *PageEntry;
unsigned __int64 FileOffset;
__int64 v18;
unsigned __int64 *v19;
unsigned __int64 v20;
_MM_PAGE_ACCESS_INFO_HEADER *v21;
NTSTATUS v22;
__int128 v23;
__int128 v24;
__int128 v25;
__int64 Src;
int v27;
__int64 v28;
int v29;
v23 = 0i64;
DWORD2(v23) = 1;
v0 = 0i64;
v25 = 0i64;
v1 = 0i64;
v2 = 0i64;
v24 = 0i64;
v22 = PfpFlushEventBuffers();
if( v22 < 0 )
return 0;
RtlpInterlockedFlushSList();
if( !Next )
{
LABEL_16:
v14 = v22;
goto LABEL_17;
}
do
{
v4 = (_MM_PAGE_ACCESS_INFO_HEADER **)Next;
v5 = v0;
Next = (_MM_PAGE_ACCESS_INFO_HEADER *)Next->Link.Next;
*v4 = v0;
v0 = (_MM_PAGE_ACCESS_INFO_HEADER *)v4;
}
while( Next );
while( 1 )
{
v6 = v0;
v28 = 0i64;
v7 = v0;
v0 = v5;
v8 = KUSER_SHARED_DATA.TickCountMultiplier * HIDWORD(v6->EmptyTime);
v9 = (KUSER_SHARED_DATA.TickCountMultiplier * (unsigned __int64)(unsigned int)v6->EmptyTime) >> 24;
HIDWORD(v28) = dword_140C5001C
+ ((((KUSER_SHARED_DATA.TickCountMultiplier * HIDWORD(v6->CreateTime)) << 8)
+ ((KUSER_SHARED_DATA.TickCountMultiplier * (unsigned __int64)(unsigned int)v6->CreateTime) >> 24)) >> 10);
v27 = HIDWORD(v28);
v29 = dword_140C5001C + (((v8 << 8) + v9) >> 10);
Src = 163851i64;
PfpCopyEvent(&Src);
if( v6->Type > MmCcReadAheadType
|| (*((_QWORD *)&v24 + 1) = v6->EmptySequenceNumber,
*(_QWORD *)&v24 = 94215i64,
PfpCopyEvent(&v24),
v6->Type > MmCcReadAheadType) )
{
PageEntry = v6->PageEntry;
if( (unsigned __int64 *)PageEntry <= v6->FileEntry )
{
while( 1 )
{
FileOffset = PageEntry->FileOffset;
v22 = 0;
v18 = PfTAcquireLogEntry((_PFP_BUFFER_MANAGER *)&stru_140C4DB30 + 319, &v22, 1);
if( !v18 )
break;
v19 = (unsigned __int64 *)(16i64 * (unsigned int)v22 + ((v18 + 31) & 0xFFFFFFFFFFFFFFF8ui64));
v20 = *v19 & 0xFFFFFFFFFFFC6007ui64;
v19[1] = FileOffset;
*v19 = v20 | 0x6007;
++PageEntry;
v22 = 0;
if( (unsigned __int64 *)PageEntry > v6->FileEntry )
goto LABEL_13;
}
v22 = -1073741670;
v6->PageEntry = PageEntry;
}
goto LABEL_12;
}
Process = (__int64)v6->Process;
FirstFileEntry = (__int64)v6->FirstFileEntry;
if( Process == 1 )
{
Process = v6->SessionId + 1;
}
else if( Process && !(unsigned int)PfpIsProcessInfoPresent(v6->Process) )
{
goto LABEL_14;
}
v2 = v6 + 1;
v1 = (_MM_PAGE_ACCESS_INFO *)&v6[1];
if( (_MM_PAGE_ACCESS_INFO *)&v6[1] < v6->PageEntry )
break;
LABEL_12:
if( v22 < 0 )
{
v14 = v22;
goto LABEL_28;
}
LABEL_13:
EmptyTime = (unsigned int)v6->EmptyTime;
EmptyTime_high = HIDWORD(v6->EmptyTime);
*(_QWORD *)&v25 = 147463i64;
*((_QWORD *)&v25 + 1) = dword_140C5001C
+ (unsigned int)((((KUSER_SHARED_DATA.TickCountMultiplier * EmptyTime_high) << 8)
+ (((unsigned __int64)KUSER_SHARED_DATA.TickCountMultiplier * EmptyTime) >> 24)) >> 10);
PfpCopyEvent(&v25);
LABEL_14:
MmFreeAccessPfnBuffer(v7, 0);
if( !v5 )
goto LABEL_16;
v5 = (_MM_PAGE_ACCESS_INFO_HEADER *)v5->Link.Next;
}
while( PfpLogPageAccess(Process, v1, &v23, FirstFileEntry, 0) )
{
if( ++v1 >= v6->PageEntry )
goto LABEL_12;
}
v14 = -1073741432;
LABEL_28:
if( v6->Type <= MmCcReadAheadType )
{
memmove(v2, v1, (LODWORD(v6->PageEntry) - (_DWORD)v1) & 0xFFFFFFF8);
v6->PageEntry -= ((char *)v1 - (char *)v2) >> 3;
}
PfpReturnAccessBuffer(v6);
LABEL_17:
if( v14 >= 0 )
return 1;
while( v0 )
{
v21 = v0;
v0 = (_MM_PAGE_ACCESS_INFO_HEADER *)v0->Link.Next;
PfpReturnAccessBuffer(v21);
}
return 0;
}Referenced by:
PfTLoggingWorker