ObDereferenceDeviceMap

VOID __stdcall ObDereferenceDeviceMap(_EPROCESS *Process){
  _EJOB *v2; 
  _ESERVERSILO_GLOBALS *ServerSiloGlobals; 
  _ETHREAD *CurrentThread; 
  ULONG_PTR v5; 
  _DEVICE_MAP *DeviceMap; 

  LODWORD(v2) = PsGetProcessServerSilo((INT64)Process);
  ServerSiloGlobals = PsGetServerSiloGlobals(v2);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  v5 = (_DWORD)ServerSiloGlobals + 120;
  ExAcquirePushLockExclusiveEx(&ServerSiloGlobals->ObSiloState.DeviceMapLock, 0i64);
  DeviceMap = (_DEVICE_MAP *)Process->DeviceMap;
  Process->DeviceMap = 0i64;
  ExReleasePushLockEx(v5, 0);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  if( DeviceMap )
    ObfDereferenceDeviceMap(DeviceMap);
}

Referenced by:

PspAssignPrimaryToken