PiProcessSetDeviceProblem

INT64 __fastcall PiProcessSetDeviceProblem(_PNP_DEVICE_ACTION_ENTRY *Request){
  _DEVICE_OBJECT *DeviceObject; 
  _DWORD *RequestArgument; 
  __int64 v3; 
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v6; 
  int v7; 
  int v8; 
  unsigned int v9; 
  int v10; 
  int v11; 
  PVOID P; 
  DeviceObject = Request->DeviceObject;
  RequestArgument = (_DWORD *)Request->RequestArgument;
  P = 0i64;
  v3 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
  if( (unsigned int)(*(_DWORD *)(v3 + 300) - 787) <= 1 )
  {
    v4 = -1073741738;
  }
  else
  {
    v4 = 0;
    PiPnpRtlBeginOperation((__int64 **)&P);
    v5 = RequestArgument[5];
    v6 = RequestArgument[6];
    v7 = (v5 >> 18) & 1 | 4;
    if( (v5 & 0x100) == 0 )
      v7 = (RequestArgument[5] >> 18) & 1;
    v8 = (RequestArgument[5] >> 1) & 0x4000 | 0x2000;
    if( (v5 & 0x400) == 0 )
      v8 = (RequestArgument[5] >> 1) & 0x4000;
    v9 = v8;
    if( v6 == 14 )
    {
      v10 = *(_DWORD *)(v3 + 300);
      if( v10 != 786 && v10 != 770 )
        v9 = v8 & 0xFFFFDFFF;
      v7 |= 4u;
    }
    if( !v9 )
    {
      v11 = 0;
      goto LABEL_15;
    }
    if( ((*(_DWORD *)(v3 + 300) - 770) & 0xFFFFFFEF) == 0
      && ((v9 & 0x4000) != 0 || v6 < 0x3A && !(unsigned int)PipIsProblemReadonly(v3, v6)) )
    {
      PipSetDevNodeProblem(v3, v6, RequestArgument[8]);
      v11 = v9;
LABEL_15:
      PipSetDevNodeFlags(v3, v11);
      PipSetDevNodeUserFlags(v3, v7);
      goto LABEL_16;
    }
    v4 = -1073741584;
  }
LABEL_16:
  if( (RequestArgument[7] & 1) != 0 )
    ExFreePoolWithTag(RequestArgument, 0x55706E50u);
  if( P )
    PiPnpRtlEndOperation(P);
  return v4;
}

Referenced by:

PnpDeviceActionWorker