PiDqQueryCompletePendedIrp
VOID __stdcall PiDqQueryCompletePendedIrp(_PI_DQ_QUERY *Query){
__int64 v2;
__int64 v3;
UINT64 v4;
INT64 v5;
_DEV_QUERY_IOCTL_CONTROL_BLOCK *p_ControlBlock;
_DEV_QUERY_IOCTL_CONTROL_BLOCK ControlBlock;
v2 = *((_QWORD *)Query + 22);
ControlBlock = 0i64;
if( v2 )
{
v3 = *(_QWORD *)(v2 + 184);
if( _InterlockedExchange64((volatile __int64 *)(v2 + 104), 0i64) )
{
v4 = 0i64;
if( (Query[54] & 1) != 0 )
{
p_ControlBlock = 0i64;
v5 = 3221225626i64;
}
else
{
PiDqQueryGetNextIoctlInfo(Query, *(unsigned int *)(v3 + 8), 0i64, &ControlBlock);
v5 = 0i64;
p_ControlBlock = &ControlBlock;
v4 = 16i64;
}
PiDqIrpComplete(
*((_IRP **)Query + 22),
v5,
v4,
p_ControlBlock,
*(_DEV_QUERY_IOCTL_CONTROL_BLOCK **)&ControlBlock.NextIoctl);
Query[54] &= ~0x10u;
*((_QWORD *)Query + 22) = 0i64;
}
}
}Referenced by:
PiDqObjectManagerServiceActionQueue