IopCancelIrpsInThreadList
UINT64 __stdcall IopCancelIrpsInThreadList(_ETHREAD *Thread, _KAPC *ApcContext){
_ETHREAD *CurrentThread;
UINT64 result;
VOID **SystemArgument1;
LOBYTE(SystemArgument1) = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( Thread == CurrentThread )
{
IopCancelIrpsInCurrentThreadList(
*(_FILE_OBJECT **)&ApcContext[1].Type,
CurrentThread,
(_IO_STATUS_BLOCK *)ApcContext[1].Thread,
(UINT8)ApcContext[1].Reserved[1]);
}
else
{
KeInitializeApc(
(INT64)ApcContext,
(INT64)Thread,
0i64,
(INT64)IopCancelIrpsInCurrentThreadListSpecialApc,
0i64,
0i64,
0,
0i64);
if( KeInsertQueueApc((INT64)ApcContext, (INT64)&SystemArgument1, 0i64, 0i64) )
{
KeWaitForSingleObject((UINT64)&ApcContext[1].ApcListEntry, 0, 0, 0, 0i64);
KeResetEvent((_KEVENT *)&ApcContext[1].ApcListEntry);
if( (_BYTE)SystemArgument1 )
{
KeInitializeEvent((INT64)&ApcContext[1].ApcListEntry, 0, 0);
KeInitializeApc(
(INT64)ApcContext,
(INT64)Thread,
0i64,
(INT64)AlpcMessageDeleteProcedure,
0i64,
(INT64)IopCancelIrpsInCurrentThreadListApcRoutine,
0,
(INT64)ApcContext);
if( KeInsertQueueApc((INT64)ApcContext, 0i64, 0i64, 0i64) )
{
KeWaitForSingleObject((UINT64)&ApcContext[1].ApcListEntry, 0, 0, 0, 0i64);
KeResetEvent((_KEVENT *)&ApcContext[1].ApcListEntry);
}
}
}
return HIDWORD(ApcContext[1].Reserved[1]);
}
return result;
}Referenced by:
IopCancelIrpsInThreadListForCurrentProcess
IopCancelSynchronousIrpsForThread