IopCheckSessionDeviceAccess

UINT8 __stdcall IopCheckSessionDeviceAccess(_DEVICE_OBJECT *DeviceObject){
  NTSTATUS SessionId; 
  NTSTATUS v3; 
  int v4; 
  __int64 v5; 
  INT64 *v6; 
  int SessionIdFromPDO; 
  UINT8 result; 

  SessionId = MmGetSessionIdEx(KeGetCurrentThread()->ApcState.Process);
  v3 = 0;
  if( SessionId != -1 )
    v3 = SessionId;
  LOBYTE(v4) = KeIsExecutingInArbitraryThreadContext();
  if( v4 || (LODWORD(v5) = PsGetThreadServerSilo((INT64)KeGetCurrentThread()), !v5) )
    v6 = &PspHostSiloGlobals;
  else
    v6 = *(INT64 **)(v5 + 1272);
  result = 1;
  if( v3 != *(_DWORD *)v6[141] || *(&stru_140CF2E80 + 1658) )
  {
    SessionIdFromPDO = IopGetSessionIdFromPDO(DeviceObject);
    if( SessionIdFromPDO != -1 && v3 != SessionIdFromPDO )
      return 0;
  }
  return result;
}

Referenced by:

IopParseDevice