PopFxAcpiRegisterDevice

NTSTATUS __stdcall PopFxAcpiRegisterDevice(
        const _UNICODE_STRING *AcpiDeviceName,
        _POP_FX_PLUGIN *AcpiPlugin,
        _PEP_ACPI_REGISTER_DEVICE *RegisterData,
        _POP_FX_DEVICE **OutputFxDevice,
        PEPHANDLE__ **OutputPepHandle){
  NTSTATUS DeviceCommon; 
  _POP_FX_DEVICE *v9; 
  NTSTATUS v10; 
  __int128 v11; 
  __int64 v12; 
  _POP_FX_DEVICE *v13; 
  _POP_FX_DEVICE *FxDevice; 
  __int128 Data; 
  __int128 v17; 
  __int64 v18; 

  FxDevice = 0i64;
  v18 = 0i64;
  Data = 0i64;
  v17 = 0i64;
  DeviceCommon = PopFxCreateDeviceCommon(
                   (const VOID **)AcpiDeviceName,
                   (POP_FX_PLUGIN *)AcpiPlugin,
                   RegisterData,
                   4ui64,
                   (__m128 **)&FxDevice);
  v9 = FxDevice;
  v10 = DeviceCommon;
  if( DeviceCommon < 0 )
    goto LABEL_7;
  v11 = *((_OWORD *)RegisterData + 1);
  Data = *(_OWORD *)RegisterData;
  v12 = *((_QWORD *)RegisterData + 4);
  *((_QWORD *)&v17 + 1) = *((_QWORD *)&v11 + 1);
  *(_QWORD *)&v17 = FxDevice;
  v18 = v12;
  PopPluginAcpiNotificationStrict(AcpiPlugin, 3ui64, &Data);
  if( !*((_QWORD *)&v17 + 1) )
    goto LABEL_5;
  PopFxInsertAcpiDevice(v13);
  if( *((_QWORD *)&v17 + 1) )
  {
    *((_QWORD *)v9 + 10) = AcpiPlugin;
    *((_QWORD *)v9 + 11) = *((_QWORD *)&v17 + 1);
    *OutputPepHandle = (PEPHANDLE__ *)*((_QWORD *)&v17 + 1);
    *OutputFxDevice = v9;
  }
  else
  {
LABEL_5:
    v10 = -1073741823;
    *OutputFxDevice = 0i64;
    *OutputPepHandle = 0i64;
  }
  if( v10 < 0 )
  {
LABEL_7:
    if( v9 )
    {
      *((_QWORD *)v9 + 10) = 0i64;
      *((_QWORD *)v9 + 11) = 0i64;
      PopFxDestroyDeviceCommon(v9);
    }
  }
  return v10;
}

Referenced by:

PopFxAcpiDispatchNotification