PnpDeviceCompletionProcessCompletedRequest

__int64 __fastcall PnpDeviceCompletionProcessCompletedRequest(VOID *a3){
  __int64 v2; 
  int v3; 

  v2 = *((_QWORD *)a3 + 2);
  *(_QWORD *)(v2 + 528) = *((_QWORD *)a3 + 6);
  *(_DWORD *)(v2 + 392) = *((_DWORD *)a3 + 10);
  PipSetDevNodeState((_DEVICE_NODE *)v2, *((_PNP_DEVNODE_STATE *)a3 + 8));
  if( *((int *)a3 + 10) >= 0 )
  {
    v3 = *((_DWORD *)a3 + 8);
    if( v3 == 774 || v3 == 779 )
    {
      PipUpdatePostStartCharacteristics(*(_DEVICE_OBJECT **)(v2 + 32));
      PnpSetObjectProperty(
        *(&stru_140CF2E80 + 607),
        *(_QWORD *)(v2 + 48),
        1u,
        0i64,
        0i64,
        (__int64)&DEVPKEY_Device_DriverProblemDesc,
        0,
        0i64,
        0,
        0);
      PiSwProcessParentStartIrp(*(_DEVICE_OBJECT **)(v2 + 32));
    }
  }
  if( *((_DWORD *)a3 + 8) == 781 )
  {
    if( (*(_DWORD *)(v2 + 704) & 0x80u) == 0 )
      KeBugCheckEx(0xCAu, (PVOID)0xD, (PVOID)v2, (PVOID)0x80, 0i64);
    PoFxIdleDevice(*(_DEVICE_OBJECT **)(v2 + 32));
    *(_DWORD *)(v2 + 704) &= ~0x80u;
  }
  PnpDeviceCompletionRequestDestroy(a3);
  return *(unsigned int *)(v2 + 392);
}

Referenced by:

PipEnumerateDevice
PnpDeviceCompletionProcessCompletedRequests
PnpStartDeviceNode