CmpCleanupPathInfo

PSLIST_ENTRY __fastcall CmpCleanupPathInfo(__int64 a1){
  struct _SLIST_ENTRY *v1; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v3; 
  PSLIST_ENTRY result; 
  v1 = *(struct _SLIST_ENTRY **)(a1 + 160);
  if( v1 )
  {
    CurrentPrcb = KeGetCurrentPrcb();
    v3 = *((_QWORD *)CurrentPrcb + 272);
    ++*(_DWORD *)(v3 + 28);
    if( *(_WORD *)v3 < *(_WORD *)(v3 + 16) )
      return RtlpInterlockedPushEntrySList((PSLIST_HEADER)v3, v1);
    ++*(_DWORD *)(v3 + 32);
    v3 = *((_QWORD *)CurrentPrcb + 273);
    ++*(_DWORD *)(v3 + 28);
    if( *(_WORD *)v3 < *(_WORD *)(v3 + 16) )
    {
      return RtlpInterlockedPushEntrySList((PSLIST_HEADER)v3, v1);
    }
    else
    {
      ++*(_DWORD *)(v3 + 32);
      return(PSLIST_ENTRY)(*(__int64(__fastcall **)(struct _SLIST_ENTRY *))(v3 + 56))(v1);
    }
  }
  return result;
}

Referenced by:

CmpDoParseKey
CmpGetSymbolicLinkTarget