PopFxAcpiDispatchNotification

NTSTATUS __stdcall PopFxAcpiDispatchNotification(POFX_CALLBACK_ACPI_REQUEST_PARAMETERS *Parameters){
  char v1; 
  UINT8 *v3; 
  int v4; 
  _UNICODE_STRING **v5; 
  POP_FX_DEVICE *v6; 
  VOID **AcpiPlugin; 
  char DeviceAccepted; 
  _POP_FX_DEVICE *OutputFxDevice; 
  PEPHANDLE__ *OutputPepHandle; 

  v1 = 0;
  AcpiPlugin = 0i64;
  OutputFxDevice = 0i64;
  OutputPepHandle = 0i64;
  DeviceAccepted = 0;
  if( PopFxAcpiValidateParameters((__int64)Parameters) )
  {
    v5 = (_UNICODE_STRING **)*((_QWORD *)Parameters + 2);
    switch( *Parameters )
    {
      case 1:
        v4 = PopFxAcpiPrepareDevice(*v5, *((_QWORD *)Parameters + 2), &AcpiPlugin, &DeviceAccepted);
        if( v4 >= 0 )
        {
          *((_QWORD *)Parameters + 5) = AcpiPlugin;
          *((_BYTE *)Parameters + 48) = DeviceAccepted;
        }
        break;
      case 2:
        PopPluginAcpiNotificationStrict(*((_POP_FX_PLUGIN **)Parameters + 5), 2ui64, *((VOID **)Parameters + 2));
        v4 = 0;
        break;
      case 3:
        v4 = PopFxAcpiRegisterDevice(
               *v5,
               *((_POP_FX_PLUGIN **)Parameters + 5),
               *((_PEP_ACPI_REGISTER_DEVICE **)Parameters + 2),
               &OutputFxDevice,
               &OutputPepHandle);
        if( v4 >= 0 )
        {
          *((_QWORD *)Parameters + 6) = OutputFxDevice;
          *((_QWORD *)Parameters + 7) = OutputPepHandle;
        }
        break;
      default:
        v6 = (POP_FX_DEVICE *)*((_QWORD *)Parameters + 1);
        if( *Parameters != 4 )
        {
          v1 = 0;
          v4 = PopFxAcpiForwardNotification(v6, (unsigned int)*Parameters, *((VOID **)Parameters + 2), v3);
          goto LABEL_15;
        }
        v4 = PopFxAcpiUnregisterDevice(v6, *((_QWORD *)Parameters + 2));
        break;
    }
    v1 = 1;
    goto LABEL_15;
  }
  v4 = -1073741823;
LABEL_15:
  *((_BYTE *)Parameters + 32) = v1;
  return v4;
}

Referenced by:

PoFxPlatformRequestHandler