CmpBounceContextCleanup

VOID __fastcall CmpBounceContextCleanup(INT64 a1){
  struct _SLIST_ENTRY *v1; 
  v1 = *(struct _SLIST_ENTRY **)(a1 + 8);
  if( v1 && v1 != *(struct _SLIST_ENTRY **)a1 && v1 != (struct _SLIST_ENTRY *)(a1 + 17) )
  {
    if( (*(_BYTE *)(a1 + 16) & 1) != 0 )
    {
      ++dword_140CDB49C;
      if( (unsigned __int16)CmpBounceBufferLookaside >= (unsigned __int16)word_140CDB490 )
      {
        ++dword_140CDB4A0;
        ((void(__fastcall *)(struct _SLIST_ENTRY *, __int16 *))qword_140CDB4B8)(v1, &CmpBounceBufferLookaside);
      }
      else
      {
        RtlpInterlockedPushEntrySList((PSLIST_HEADER)&CmpBounceBufferLookaside, v1);
      }
    }
    else
    {
      CmSiFreeMemory(*(PPRIVILEGE_SET *)(a1 + 8));
    }
  }
}

Referenced by:

NtEnumerateKey
NtEnumerateValueKey
NtQueryMultipleValueKey