PopFxAcpiPrepareDevice
INT64 __fastcall PopFxAcpiPrepareDevice(UNICODE_STRING *a1, UINT64 a2, VOID ***a3, BYTE *a4){
int AcpiDeviceByUniqueId;
_ETHREAD *CurrentThread;
VOID **v9;
ULONG_PTR i;
AcpiDeviceByUniqueId = PopFxFindAcpiDeviceByUniqueId(a1, 0i64);
if( AcpiDeviceByUniqueId < 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v9 = 0i64;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PopFxPluginLock, 0i64);
for( i = PopFxPluginList; (ULONG_PTR *)i != &PopFxPluginList; i = *(_QWORD *)i )
{
if( *(_DWORD *)(i + 16) >= 3u
&& *(_QWORD *)(i + 112)
&& (unsigned __int8)PopPluginAcpiNotificationStrict(i, 1ui64, a2)
&& *(_BYTE *)(a2 + 12) )
{
v9 = (VOID **)i;
break;
}
}
if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxPluginLock, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)&PopFxPluginLock);
KeAbPostRelease(&PopFxPluginLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v9 )
{
*a3 = v9;
AcpiDeviceByUniqueId = 0;
*a4 = 1;
}
}
else
{
return(unsigned int)-1073741823;
}
return(unsigned int)AcpiDeviceByUniqueId;
}Referenced by:
PopFxAcpiDispatchNotification