IopCheckListForCancelableIrp
UINT8 __stdcall IopCheckListForCancelableIrp(
_LIST_ENTRY *IrpListHead,
_EPROCESS *Process,
_IO_STATUS_BLOCK *IoRequestToCancel,
_ETHREAD *Thread,
_LIST_ENTRY *hintEntry,
_IRP **Irp){
_LIST_ENTRY *Flink;
UINT8 v7;
_LIST_ENTRY *v8;
Flink = hintEntry;
v7 = 1;
*Irp = 0i64;
if( !hintEntry )
Flink = IrpListHead->Flink;
while( IrpListHead != Flink )
{
v8 = Flink - 2;
if( (_EPROCESS *)((unsigned __int64)Flink[3].Blink & 0xFFFFFFFFFFFFFFF9ui64) == Process
&& (!IoRequestToCancel || (_IO_STATUS_BLOCK *)v8[4].Blink == IoRequestToCancel)
&& (!Thread || (_ETHREAD *)v8[9].Blink == Thread) )
{
if( SBYTE3(v8[4].Flink) < SBYTE2(v8[4].Flink) + 2 && !BYTE4(v8[4].Flink) )
{
v7 = 0;
IopInterlockedAdd((UINT64 *)&v8[5].Blink, 1i64);
*Irp = (_IRP *)v8;
return v7;
}
v7 &= -(((__int64)v8[1].Flink & 0x10000) != 0);
}
Flink = Flink->Flink;
}
return v7;
}Referenced by:
IopCancelIrpsInFileObjectList