PnpSetDeviceAffinityThread

UINT64 __stdcall PnpSetDeviceAffinityThread(_DEVICE_OBJECT *Device, _GROUP_AFFINITY *PreviousAffinity){
  unsigned int v3; 
  struct _GROUP_AFFINITY Affinity; 
  Affinity = 0i64;
  if( Device )
    Device = *(_DEVICE_OBJECT **)(*((_QWORD *)Device + 39) + 40i64);
  if( !Device )
    return 0i64;
  v3 = *((_DWORD *)Device + 165);
  if( v3 > 0xFFFFFFFD )
    return 0i64;
  if( v3 >= (unsigned __int16)KeNumberNodes )
    return 0i64;
  KeQueryNodeActiveAffinity(*((_WORD *)Device + 330), &Affinity, 0i64);
  KeAndGroupAffinityEx(&KeActiveProcessors, &Affinity, &Affinity);
  if( !Affinity.Mask )
    return 0i64;
  KeSetSystemGroupAffinityThread(&Affinity, PreviousAffinity);
  return 1i64;
}

Referenced by:

PnpCallAddDevice
PnpSendIrp