ObpFreeObjectNameBuffer

VOID __stdcall ObpFreeObjectNameBuffer(_UNICODE_STRING *ObjectName){
  _SLIST_ENTRY *Buffer; 
  struct _KPRCB *CurrentPrcb; 
  _GENERAL_LOOKASIDE *P; 

  Buffer = (_SLIST_ENTRY *)ObjectName->Buffer;
  if( ObjectName->MaximumLength == 248 )
  {
    CurrentPrcb = KeGetCurrentPrcb();
    P = CurrentPrcb->PPLookasideList[5].P;
    ++P->TotalFrees;
    if( LOWORD(P->ListHead.Alignment) < P->Depth
      || (++P->FreeMisses,
          P = CurrentPrcb->PPLookasideList[5].L,
          ++P->TotalFrees,
          LOWORD(P->ListHead.Alignment) < P->Depth) )
    {
      RtlpInterlockedPushEntrySList(&P->ListHead, Buffer);
    }
    else
    {
      ++P->FreeMisses;
      ((void(__fastcall *)(_SLIST_ENTRY *))P->FreeEx)(Buffer);
    }
  }
  else
  {
    ExFreePoolWithTag(ObjectName->Buffer, 0);
  }
}

Referenced by:

CmpCreateKeyBody
IopAllocRealFileObject
ObCreateObjectEx
ObReferenceObjectByName
ObReferenceObjectByNameEx