ObpDeleteSymbolicLinkName

void **__fastcall ObpDeleteSymbolicLinkName(__int64 a1){
  void **result; 
  int v2; 
  __int64 v4; 
  __int64 v5; 
  __int64 *CurrentServerSiloGlobals; 
  _ETHREAD *CurrentThread; 
  __int64 *v8; 
  __int64 v9; 
  int v10; 
  void *retaddr; 
  result = &retaddr;
  v2 = *(_DWORD *)(a1 + 24);
  if( v2 )
  {
    v4 = a1 - 48 - *((unsigned __int8 *)ObpInfoMaskToOffset + (*(_BYTE *)(a1 - 48 + 26) & 3));
    result = *(void ***)v4;
    v5 = *(_QWORD *)(*(_QWORD *)v4 + 304i64);
    if( v5 )
    {
      CurrentServerSiloGlobals = PsGetCurrentServerSiloGlobals();
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      v8 = CurrentServerSiloGlobals;
      --*((_WORD *)CurrentThread + 243);
      ExAcquirePushLockExclusiveEx((UINT64)(CurrentServerSiloGlobals + 15), 0i64);
      v9 = (unsigned int)(v2 - 1);
      v10 = ~(1 << (v2 - 1));
      *(_DWORD *)(v5 + 28) &= v10;
      *(_BYTE *)(v9 + v5 + 32) = 0;
      if( v5 == *v8 )
        *((_DWORD *)v8 + 2) &= v10;
      else
        --*((_DWORD *)v8 + v9 + 3);
      ExReleasePushLockEx((UINT64)(v8 + 15), 0i64);
      result = (void **)KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    }
    *(_DWORD *)(a1 + 24) = 0;
  }
  return result;
}

Referenced by:

ObCloseHandleTableEntry
ObShutdownSystem
ObpDeleteNameCheck
ObpMarkDirectoryObjectsTemporary