ProducerConsumerCopyFromContextBuffer

VOID __stdcall ProducerConsumerCopyFromContextBuffer(
        CHAR *Buffer,
        UINT64 Size,
        _PRODUCER_CONSUMER_CONTEXT *Context,
        CHAR *ReservedBuffer){
  __int64 v4; 
  unsigned int v5; 
  size_t v6; 
  __int64 v9; 

  v4 = (unsigned int)Context[2];
  v5 = (_DWORD)ReservedBuffer - *Context;
  v6 = 0;
  if( v5 >= (unsigned int)v4 )
  {
    v5 -= v4;
    ReservedBuffer -= v4;
  }
  if( v5 + (unsigned int)Size > (unsigned int)v4 )
  {
    v6 = Size + v5 - v4;
    LODWORD(Size) = v4 - v5;
  }
  v9 = (unsigned int)Size;
  memmove(Buffer, ReservedBuffer, Size);
  if( v6 )
    memmove(&Buffer[v9], *(const VOID **)Context, v6);
}

Referenced by:

PopDecompressHiberBlocks
PopReadProducerConsumerBuffer