PiDqQueryGetNextIoctlInfo
VOID __stdcall PiDqQueryGetNextIoctlInfo(
_PI_DQ_QUERY *Query,
UINT64 CurrentBufferSize,
UINT64 MinBytesNeeded,
_DEV_QUERY_IOCTL_CONTROL_BLOCK *ControlBlock){
_PI_DQ_QUERY v4;
unsigned int v5;
unsigned int v6;
unsigned int cbNextBufferSize;
if( !*((_QWORD *)Query + 23) && *((_PI_DQ_QUERY **)Query + 24) == Query + 48 && (Query[54] & 0x20) != 0 )
{
if( (*(_DWORD *)(*((_QWORD *)Query + 3) + 40i64) & 1) != 0 )
{
ControlBlock->NextIoctl = 4653064;
ControlBlock->cbNextBufferSize = 16;
}
else
{
*(_QWORD *)&ControlBlock->NextIoctl = 0i64;
}
}
else
{
ControlBlock->NextIoctl = 4653063;
if( (Query[54] & 0x20) != 0 )
{
v4 = Query[52];
if( *((_QWORD *)Query + 23) )
++v4;
}
else
{
v4 = 4;
}
if( (_DWORD)MinBytesNeeded )
v5 = MinBytesNeeded * v4 + 16;
else
v5 = v4 << 10;
v6 = 0x10000;
ControlBlock->cbNextBufferSize = v5;
if( v5 > 0x10000 )
ControlBlock->cbNextBufferSize = 0x10000;
else
v6 = v5;
if( v6 < (unsigned int)MinBytesNeeded )
{
ControlBlock->cbNextBufferSize = MinBytesNeeded;
v6 = MinBytesNeeded;
}
cbNextBufferSize = ControlBlock->cbNextBufferSize;
if( v6 < (unsigned int)CurrentBufferSize )
cbNextBufferSize = CurrentBufferSize;
ControlBlock->cbNextBufferSize = cbNextBufferSize;
}
}Referenced by:
PiDqIrpQueryCreate
PiDqIrpQueryGetResult
PiDqQueryCompletePendedIrp