PopFxAcpiPrepareDevice

NTSTATUS __stdcall PopFxAcpiPrepareDevice(
        _UNICODE_STRING *AcpiDeviceName,
        ULONG_PTR Data,
        VOID ***AcpiPlugin,
        _BYTE *DeviceAccepted){
  _BYTE *v4; 
  int AcpiDeviceByUniqueId; 
  _ETHREAD *CurrentThread; 
  VOID **v9; 
  _POP_FX_PLUGIN *i; 

  v4 = *(_BYTE **)&Data;
  AcpiDeviceByUniqueId = PopFxFindAcpiDeviceByUniqueId(AcpiDeviceName, 0i64);
  if( AcpiDeviceByUniqueId >= 0 )
    return -1073741823;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v9 = 0i64;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C23628 + 497, 0i64);
  for( i = (_POP_FX_PLUGIN *)*(&stru_140C23628 + 493);
        i != (_POP_FX_PLUGIN *)((char *)&stru_140C23628 + 3944);
        i = *(_POP_FX_PLUGIN **)i )
  {
    if( *((_DWORD *)i + 4) >= 3u && *((_QWORD *)i + 14) && PopPluginAcpiNotificationStrict(i, 1ui64, v4) && v4[12] )
    {
      v9 = (VOID **)i;
      break;
    }
  }
  if( _InterlockedCompareExchange64((_QWORD *)&stru_140C23628 + 497, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C23628 + 497);
  KeAbPostRelease((char *)&stru_140C23628 + 3976);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( v9 )
  {
    *AcpiPlugin = v9;
    AcpiDeviceByUniqueId = 0;
    *DeviceAccepted = 1;
  }
  return AcpiDeviceByUniqueId;
}

Referenced by:

PopFxAcpiDispatchNotification