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