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