IopCheckSessionDeviceAccess

UINT8 __stdcall IopCheckSessionDeviceAccess(_DEVICE_OBJECT *DeviceObject){
  int SessionId; 
  int v3; 
  INT64 ThreadServerSilo; 
  INT64 *v5; 
  int SessionIdFromPDO; 
  UINT8 result; 
  SessionId = MmGetSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
  v3 = 0;
  if( SessionId != -1 )
    v3 = SessionId;
  if( KeIsExecutingInArbitraryThreadContext()
    || (ThreadServerSilo = PsGetThreadServerSilo((INT64)KeGetCurrentThread())) == 0 )
  {
    v5 = &PspHostSiloGlobals;
  }
  else
  {
    v5 = *(INT64 **)(ThreadServerSilo + 1272);
  }
  result = 1;
  if( v3 != *(_DWORD *)v5[141] || IopSessionZeroAccessCheckEnabled )
  {
    SessionIdFromPDO = IopGetSessionIdFromPDO(DeviceObject);
    if( SessionIdFromPDO != -1 && v3 != SessionIdFromPDO )
      return 0;
  }
  return result;
}

Referenced by:

IopParseDevice