PfTReplaceCurrentBuffer

NTSTATUS __stdcall PfTReplaceCurrentBuffer(PFP_BUFFER_MANAGER *BufferMgr){
  _QWORD *v1; 
  __int64 v2; 
  __int64 v3; 
  NTSTATUS v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  __int64 v7; 
  unsigned __int16 v9; 
  __int64 v10; 

  v1 = PfTGetFreeBuffer((__int64)BufferMgr);
  v4 = 0;
  v5 = v1;
  if( !v1 )
    return -1073741823;
  if( (*(_DWORD *)v2 & 0xF) == 1 )
  {
    v9 = *((_WORD *)v1 + 16) + *(_WORD *)(*(_QWORD *)(v2 + 24) + 36i64);
    v10 = 0xFFFF - (unsigned int)v9;
    *((_WORD *)v1 + 18) = v9;
    if( (unsigned int)v10 < *((_DWORD *)v1 + 8) )
      *(_QWORD *)((((unsigned __int64)v1 + 47) & 0xFFFFFFFFFFFFFFF8ui64) + 40 * v10) = -1i64;
  }
  v6 = (_QWORD *)(v3 + 24);
  v7 = *(_QWORD *)(v3 + 24);
  if( *(_QWORD *)(v7 + 8) != v3 + 24 )
    __fastfail(3u);
  *v5 = v7;
  v5[1] = v6;
  *(_QWORD *)(v7 + 8) = v5;
  *v6 = v5;
  if( *(_WORD *)(v3 + 10) <= *(_WORD *)(v3 + 8) )
    KeSetEvent((PRKEVENT)((char *)&stru_140C4DB30 + 7744), 0, 0);
  return v4;
}

Referenced by:

PfTAcquireLogEntry
PfpLogPageAccess