PopPowerRequestCallbackWorker

VOID __stdcall PopPowerRequestCallbackWorker(VOID *Context){
  _QWORD *v1; 
  __int64 v2; 
  int v3; 
  char *v4; 
  __int64 v5; 
  char v6; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  char PendingCallbacks[8]; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  while( 1 )
  {
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 751, &LockHandle);
    if( (_UNKNOWN *)*(&stru_140C23628 + 753) == (_UNKNOWN *)((char *)&stru_140C23628 + 6024) )
    {
      v2 = 0i64;
      v3 = 0;
      *(&stru_140C23628 + 6017) = 0;
    }
    else
    {
      v1 = *(_QWORD **)(*(&stru_140C23628 + 754) + 8i64);
      if( (_UNKNOWN *)**(&stru_140C23628 + 754) != (_UNKNOWN *)((char *)&stru_140C23628 + 6024)
        || *v1 != *(&stru_140C23628 + 754) )
      {
        __fastfail(3u);
      }
      v2 = *(&stru_140C23628 + 754) - 56i64;
      *(&stru_140C23628 + 754) = *(_QWORD *)(*(&stru_140C23628 + 754) + 8i64);
      v3 = 0;
      *v1 = (char *)&stru_140C23628 + 6024;
      v4 = (char *)(v2 + 72);
      v5 = 6i64;
      do
      {
        v6 = *v4;
        PendingCallbacks[(_QWORD)v4 - v2 - 72] = *v4;
        if( v6 )
        {
          *v4 = 0;
          ++v3;
        }
        ++v4;
        --v5;
      }
      while( v5 );
      *(_BYTE *)(v2 + 78) = 0;
    }
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( !v2 )
      break;
    if( v3 )
      PopPowerRequestExecuteCallbacks(PendingCallbacks, *(unsigned int *)(v2 + 28), *(unsigned int *)(v2 + 16));
    ObfDereferenceObjectWithTag((VOID *)v2, 0x72506F50ui64);
  }
}

Referenced by:

PoClearPowerRequestInternal
PoSetPowerRequestInternal