PiDqQueryGetNextIoctlInfo

INT64 __fastcall PiDqQueryGetNextIoctlInfo(INT64 a1, UINT64 a2, UINT64 a3, _DWORD *a4){
  INT64 result; 
  int v5; 
  unsigned int v6; 
  unsigned int v7; 
  if( !*(_QWORD *)(a1 + 184) && *(_QWORD *)(a1 + 192) == a1 + 192 && (*(_DWORD *)(a1 + 216) & 0x20) != 0 )
  {
    result = *(_QWORD *)(a1 + 24);
    if( (*(_DWORD *)(result + 40) & 1) != 0 )
    {
      *a4 = 4653064;
      a4[1] = 16;
    }
    else
    {
      *(_QWORD *)a4 = 0i64;
    }
  }
  else
  {
    *a4 = 4653063;
    if( (*(_DWORD *)(a1 + 216) & 0x20) != 0 )
    {
      v5 = *(_DWORD *)(a1 + 208);
      if( *(_QWORD *)(a1 + 184) )
        ++v5;
    }
    else
    {
      v5 = 4;
    }
    if( (_DWORD)a3 )
      v6 = a3 * v5 + 16;
    else
      v6 = v5 << 10;
    v7 = 0x10000;
    a4[1] = v6;
    if( v6 > 0x10000 )
      a4[1] = 0x10000;
    else
      v7 = v6;
    if( v7 < (unsigned int)a3 )
    {
      a4[1] = a3;
      v7 = a3;
    }
    result = (unsigned int)a4[1];
    if( v7 < (unsigned int)a2 )
      result = (unsigned int)a2;
    a4[1] = result;
  }
  return result;
}

Referenced by:

PiDqIrpQueryCreate
PiDqIrpQueryGetResult
PiDqQueryCompletePendedIrp