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