PopPepIterateDeviceList
bool __fastcall PopPepIterateDeviceList(
void (__fastcall *a1)(__int64),
unsigned __int8 (__fastcall *a2)(_LIST_ENTRY *, __int64),
void (__fastcall *a3)(void (__fastcall *)(__int64), __int64),
__int64 a4,
char a5,
char a6,
__int64 a7){
void(__fastcall *v9)(__int64);
_ETHREAD *CurrentThread;
void **v11;
bool v12;
v9 = a1;
if( a5 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&PopIrpWorkerControlEvent + 356, 0i64);
}
if( v9 )
((void(__fastcall *)(__int64, unsigned __int8(__fastcall *)(_LIST_ENTRY *, __int64), void(__fastcall *)(void(__fastcall *)(__int64), __int64), __int64))v9)(
a7,
a2,
a3,
a4);
v11 = (void **)*(&PopIrpWorkerControlEvent + 336);
v12 = 1;
if( (_UNKNOWN *)*(&PopIrpWorkerControlEvent + 336) != (_UNKNOWN *)((char *)&PopIrpWorkerControlEvent + 2688) )
{
do
{
if( !((unsigned __int8(__fastcall *)(void **, __int64, void(__fastcall *)(void(__fastcall *)(__int64), __int64), __int64))a2)(
v11,
a7,
a3,
a4) )
break;
v11 = (void **)*v11;
}
while( v11 != (void **)((char *)&PopIrpWorkerControlEvent + 2688) );
v12 = v11 == (void **)((char *)&PopIrpWorkerControlEvent + 2688);
}
if( a3 )
{
LOBYTE(a1) = v12;
((void(__fastcall *)(void(__fastcall *)(__int64), __int64, void(__fastcall *)(void(__fastcall *)(__int64), __int64), __int64))a3)(
a1,
a7,
a3,
a4);
}
if( a6 )
{
if( _InterlockedCompareExchange64((_QWORD *)&PopIrpWorkerControlEvent + 356, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((_EX_PUSH_LOCK *)&PopIrpWorkerControlEvent + 356);
KeAbPostRelease((char *)&PopIrpWorkerControlEvent + 2848);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}
return v12;
}Referenced by:
PopPlRegisterPowerPlane