PiPnpRtlGatherInstallerClassChangeInfo

NTSTATUS __stdcall PiPnpRtlGatherInstallerClassChangeInfo(
        WCHAR *DeviceInstanceId,
        WCHAR *NewInstallerClass,
        PI_PNPRTL_INSTALLER_CLASS_CHANGE_INFO **Info){
  VOID **PoolWithTag; 
  INT64 v7; 
  CHAR *v8; 
  int Object; 
  NTSTATUS ObjectProperty; 
  int Guid; 
  _GUID Guid_4; 
  WCHAR GuidString[40]; 

  Guid = 0;
  Guid_4 = 0i64;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x18ui64, 1198550608i64);
  *Info = (PI_PNPRTL_INSTALLER_CLASS_CHANGE_INFO *)PoolWithTag;
  if( !PoolWithTag )
  {
    Object = -1073741670;
    goto LABEL_10;
  }
  *(_OWORD *)PoolWithTag = 0i64;
  PoolWithTag[2] = 0i64;
  if( NewInstallerClass )
  {
    Object = PiDmAddCacheReferenceForObject(2, NewInstallerClass, (PI_DM_OBJECT **)*Info + 2);
    if( Object < 0 )
      goto LABEL_10;
  }
  Object = PiDmGetObject(1, DeviceInstanceId, (PI_DM_OBJECT **)*Info);
  if( (int)(Object + 0x80000000) >= 0 && Object != -1073741772 )
    goto LABEL_10;
  ObjectProperty = PnpGetObjectProperty(
                     *(&stru_140CF2E80 + 1214),
                     (INT64)DeviceInstanceId,
                     1i64,
                     0i64,
                     0i64,
                     (INT64)&DEVPKEY_Device_ClassGuid,
                     (INT64)&Guid,
                     (INT64)&Guid_4);
  Object = ObjectProperty;
  if( ObjectProperty == -1073741275 || ObjectProperty == -1073741772 )
  {
    Object = 0;
  }
  else
  {
    if( ObjectProperty < 0 )
      goto LABEL_10;
    Object = PnpStringFromGuid(&Guid_4, GuidString, (UINT64)v8);
    if( Object < 0 )
      goto LABEL_10;
    Object = PiDmGetObject(2, GuidString, (PI_DM_OBJECT **)*Info + 1);
    if( Object == -1073741772 )
      return 0;
  }
  if( Object < 0 )
  {
LABEL_10:
    PiPnpRtlFreeInstallerClassChangeInfo(*Info, v7, v8);
    *Info = 0i64;
  }
  return Object;
}

Referenced by:

PiPnpRtlCmActionCallback