RtlpFcBufferManagerUpdateBuffers

NTSTATUS __fastcall RtlpFcBufferManagerUpdateBuffers(_EX_PUSH_LOCK *a1, __int64 a2, __int64 a3){
  __int64 v4; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  _EX_PUSH_LOCK *v9; 
  __int64 v10; 
  char *v11; 

  v4 = a1->_bf_0 & 1;
  v6 = (unsigned int)v4;
  v7 = 3i64;
  v8 = ((_BYTE)v4 - 1) & 1;
  v9 = &a1[9 * v4];
  v10 = (__int64)&v9[3] - a3;
  v11 = (char *)&a1[8 * v8 + 3 + v8] - a3;
  do
  {
    if( *(_QWORD *)a3 )
    {
      *(_OWORD *)&v11[a3] = *(_OWORD *)a3;
      *(_QWORD *)&v11[a3 + 16] = *(_QWORD *)(a3 + 16);
      *(_OWORD *)a3 = *(_OWORD *)(a3 + v10);
      *(_QWORD *)(a3 + 16) = *(_QWORD *)(a3 + v10 + 16);
    }
    else
    {
      *(_OWORD *)&v11[a3] = *(_OWORD *)(a3 + v10);
      *(_QWORD *)&v11[a3 + 16] = *(_QWORD *)(a3 + v10 + 16);
    }
    a3 += 24i64;
    --v7;
  }
  while( v7 );
  a1[v8 + 21]._bf_0 = a2;
  RtlUpdateSwapReference(a1, v8);
  a1[v6 + 21]._bf_0 = 0i64;
  return RtlpFcInitializeBuffers((INT64)&v9[3]);
}

Referenced by:

CmFcManagerStartBootPhase
CmFcManagerStartRuntimePhase
CmFcManagerUpdateFeatureConfigurations
CmFcManagerUpdateFeatureUsageSubscriptions