PopRequestCompletion

NTSTATUS __stdcall PopRequestCompletion(_DEVICE_OBJECT *DeviceObject, _IRP *Irp, VOID *Context){
  INT64 v3; 
  char v5; 
  _IRP *v6; 
  char v7; 
  void(__fastcall *v8)(_QWORD, _IRP *, _QWORD, _QWORD, _IO_STATUS_BLOCK *); 
  INT64 v9; 
  int Status; 
  __int64 v12; 
  __int64 v13; 

  v3 = *((_QWORD *)Context + 25);
  v5 = *((_BYTE *)Context + 209);
  v6 = Irp;
  v7 = *((_BYTE *)Context + 184);
  if( v3 && v7 == 2 )
    PopFxNotifyPreDIrpCompletion(v3, (INT64)Irp, (unsigned int)Irp->IoStatus.Status);
  v8 = (void(__fastcall *)(_QWORD, _IRP *, _QWORD, _QWORD, _IO_STATUS_BLOCK *))*((_QWORD *)Context + 27);
  if( v8 )
  {
    LOBYTE(Irp) = v7;
    v8(*((_QWORD *)Context + 29), Irp, *((unsigned int *)Context + 48), *((_QWORD *)Context + 28), &v6->IoStatus);
  }
  if( v7 )
  {
    PopDequeueQuerySetIrp(v6);
    if( v3 && *((_BYTE *)Context + 184) == 2 && *((_DWORD *)Context + 47) == 1 && v5 )
    {
      if( *((_DWORD *)Context + 48) == 1 )
      {
        _m_prefetchw((const void *)(v3 + 32));
        if( (_InterlockedAnd((volatile signed __int32 *)(v3 + 32), 0xFFFFFFFD) & 2) != 0 )
        {
LABEL_16:
          LOBYTE(v9) = 1;
          PopPepDeviceDState(
            *(PEPHANDLE__ **)(v3 + 56),
            *((_DEVICE_POWER_STATE *)Context + 48),
            v9,
            *((unsigned int *)Context + 62));
          PopDiagTraceFxDevicePowerState(*(VOID **)(v3 + 48), *((_DEVICE_POWER_STATE *)Context + 48));
          goto LABEL_6;
        }
        v5 = 0;
      }
      if( v5 )
        goto LABEL_16;
    }
  }
  else
  {
    PopDiagTraceIrpFinish(v6);
    Status = v6->IoStatus.Status;
    if( Status >= 0 )
    {
      if( *((_BYTE *)Context + 240) )
      {
        PopUpdateWakeSource(*((_DEVICE_OBJECT **)Context + 3));
        Status = v6->IoStatus.Status;
      }
      if( Status >= 0 )
      {
        v12 = *((_QWORD *)Context + 3);
        v13 = v12 ? *(_QWORD *)(*(_QWORD *)(v12 + 312) + 40i64) : 0i64;
        if( v13 && (*(_DWORD *)(v13 + 760) & 0x30000) != 0 )
          PopDirectedDripsStartDisengageTimer(0i64);
      }
    }
    if( v3 )
    {
      PopPepDeviceWaitWake(*(PEPHANDLE **)(v3 + 56), 1u);
      if( _InterlockedExchangeAdd((volatile signed __int32 *)(v3 + 244), 0xFFFFFFFF) == 1 )
        KeSetEvent((PRKEVENT)(v3 + 248), 0, 0);
    }
  }
LABEL_6:
  PopFreeIrp(v6);
  return -1073741802;
}

Referenced by:

No references.