PnpInitializeSessionId

void __fastcall PnpInitializeSessionId(__int64 a1, __int64 a2, char a3){
  int SessionIdFromPDO; 
  __int64 v5; 
  __int64 v8; 
  unsigned int v9; 
  int *v10; 
  int v11; 
  int v12; 
  SessionIdFromPDO = -1;
  v5 = *(_QWORD *)(a1 + 16);
  v12 = -1;
  if( v5 )
  {
    v8 = *(_QWORD *)(v5 + 32);
    if( (*(_DWORD *)(*(_QWORD *)(v8 + 312) + 32i64) & 0x400) != 0 )
    {
      SessionIdFromPDO = IopGetSessionIdFromPDO((DEVICE_OBJECT *)v8);
      v12 = SessionIdFromPDO;
    }
  }
  if( !a3 || SessionIdFromPDO != -1 )
  {
    if( SessionIdFromPDO == -1 )
    {
      v9 = 0;
      v10 = 0i64;
      v11 = 0;
    }
    else
    {
      v9 = 4;
      v10 = &v12;
      v11 = 7;
    }
    PnpSetObjectProperty(
      PiPnpRtlCtx,
      *(_QWORD *)(a1 + 48),
      1u,
      a2,
      0i64,
      (__int64)&DEVPKEY_Device_SessionId,
      v11,
      (__int64)v10,
      v9,
      a3 != 0 ? 0x20000 : 0);
  }
}

Referenced by:

PiProcessNewDeviceNode