AlpcpDestroyBlob

VOID __stdcall AlpcpDestroyBlob(PVOID Blob){
  int v1; 
  char *v2; 
  int v3; 
  __int64 v5; 
  v2 = (char *)Blob - 48;
  v3 = v1;
  v5 = AlpcpRegisteredTypes[(unsigned __int8)*((char *)Blob - 31)];
  (*(void(**)(void))(v5 + 24))();
  if( v3 )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Blob - 2, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)Blob - 2);
    KeAbPostRelease((char *)Blob - 16);
  }
  if( (*(int(__fastcall **)(PVOID))(v5 + 40))(Blob) >= 0 )
  {
    if( (v2[16] & 2) != 0 )
    {
      ExFreeToNPagedLookasideList(
        (NPAGED_LOOKASIDE_LIST *)&AlpcpLookasides[16 * (unsigned __int64)*(unsigned int *)(v5 + 8)],
        v2);
    }
    else if( *(_QWORD *)(v5 + 48) )
    {
      ((void(__fastcall *)(char *))AlpcpLookasides[16 * (unsigned __int64)*(unsigned int *)(v5 + 8) + 7])(v2);
    }
    else
    {
      ExFreePoolWithTag(v2, *(_DWORD *)(v5 + 4));
    }
  }
}

Referenced by:

AlpcpCompleteDispatchMessage
AlpcpReceiveMessage