ObpGetShadowDirectory

_OBJECT_DIRECTORY *__stdcall ObpGetShadowDirectory(_OBJECT_DIRECTORY *Dir){
  char v1; 
  unsigned int Flags; 
  _OBJECT_DIRECTORY *GlobalDosDevicesDirectory; 
  _ESERVERSILO_GLOBALS *CurrentServerSiloGlobals; 
  _ETHREAD *CurrentThread; 
  _DEVICE_MAP *DeviceMap; 

  Flags = Dir->Flags;
  GlobalDosDevicesDirectory = 0i64;
  if( (Flags & 4) != 0 )
  {
    if( (Flags & 0x10) == 0 || v1 )
      return Dir->ShadowDirectory;
  }
  else
  {
    CurrentServerSiloGlobals = PsGetCurrentServerSiloGlobals((_KSPIN_LOCK *)Dir);
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.SpecialApcDisable;
    ExAcquirePushLockSharedEx(&CurrentServerSiloGlobals->ObSiloState.DeviceMapLock, 0i64);
    DeviceMap = Dir->DeviceMap;
    if( DeviceMap )
      GlobalDosDevicesDirectory = DeviceMap->GlobalDosDevicesDirectory;
    ExReleasePushLockEx((_DWORD)CurrentServerSiloGlobals + 120, 0);
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  }
  return GlobalDosDevicesDirectory;
}

Referenced by:

ObpLookupDirectoryEntryEx