PiDcHandleDeviceEvent

NTSTATUS __stdcall PiDcHandleDeviceEvent(PI_PNPRTL_OBJECT_EVENT *ObjectEvent){
  int ObjectProperty; 
  unsigned int v2; 
  __int64 v4; 
  __int128 v5; 
  _DWORD *v6; 
  _DWORD *v7; 
  UINT64 v9; 
  _DWORD v10[4]; 
  INT64 v11[2]; 
  __int128 Buffer; 
  PI_PNPRTL_OBJECT_EVENT v13; 
  int v14; 
  WCHAR GuidString[40]; 

  ObjectProperty = 0;
  v2 = 0;
  v10[2] = 0;
  v10[1] = 0;
  v14 = 0;
  *(_OWORD *)v11 = 0i64;
  LOBYTE(v10[0]) = 0;
  if( ObjectEvent[19] )
  {
    while( 1 )
    {
      v4 = 8i64 * v2;
      v5 = *(_OWORD *)&ObjectEvent[v4 + 20];
      v13 = ObjectEvent[v4 + 24];
      Buffer = v5;
      v6 = RtlLookupElementGenericTableAvl((_RTL_AVL_TABLE *)((char *)&PnpReplaceEvent + 1952), &Buffer);
      v7 = v6;
      if( !ObjectEvent[v4 + 25] && !*(_QWORD *)&ObjectEvent[v4 + 26] && v6 )
        break;
      if( ++v2 >= ObjectEvent[19] )
        return ObjectProperty;
    }
    ObjectProperty = PnpGetObjectProperty(
                       *(&stru_140CF2E80 + 1214),
                       *(_QWORD *)(*((_QWORD *)ObjectEvent + 1) + 16i64),
                       1i64,
                       0i64,
                       0i64,
                       (INT64)&DEVPKEY_Device_ContainerId,
                       (INT64)&v10[1],
                       (INT64)v11);
    if( ObjectProperty >= 0 && v10[1] == 13 && v10[2] == 16 )
    {
      ObjectProperty = PnpStringFromGuid((const _GUID *)v11, GuidString, v9);
      if( ObjectProperty >= 0 )
      {
        ObjectProperty = PnpGetObjectProperty(
                           *(&stru_140CF2E80 + 1214),
                           (INT64)GuidString,
                           5i64,
                           0i64,
                           0i64,
                           (INT64)&DEVPKEY_DeviceContainer_IsLocalMachine,
                           (INT64)&v10[1],
                           (INT64)v10);
        if( ObjectProperty >= 0 && v10[1] == 17 && v10[2] == 1 && (LOBYTE(v10[0]) != 0xFF || (v7[5] & 1) != 0) )
          return PiDcContainerRequiresConfiguration(GuidString);
      }
    }
  }
  return ObjectProperty;
}

Referenced by:

PiDcHandleObjectEvent