IoCancelThreadIo
VOID __stdcall IoCancelThreadIo(){
void *v0;
_LARGE_INTEGER v1;
void *v2;
void *v3;
unsigned int *p_SystemCallNumber;
unsigned __int8 CurrentIrql;
unsigned int *i;
unsigned int v7;
unsigned int v8;
unsigned __int8 v9;
unsigned int v10;
_LARGE_INTEGER Interval;
Interval = v1;
p_SystemCallNumber = &KeGetCurrentThread()[1].SystemCallNumber;
if( *(unsigned int **)p_SystemCallNumber != p_SystemCallNumber )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(1ui64);
for( i = *(unsigned int **)p_SystemCallNumber; p_SystemCallNumber != i; i = *(unsigned int **)i )
IoCancelIrp((_KDPC *)(i - 8), v0, v2, v3);
v7 = 100 * dword_140C50A18;
v8 = 0;
Interval.QuadPart = -100000i64;
__writecr8(CurrentIrql);
while( 1 )
{
v9 = KeGetCurrentIrql();
__writecr8(1ui64);
if( *(unsigned int **)p_SystemCallNumber == p_SystemCallNumber )
break;
__writecr8(v9);
KeDelayExecutionThread(0, 0, &Interval);
v10 = v8++;
if( v10 > v7 )
IopDisassociateThreadIrp();
}
__writecr8(v9);
}
}Referenced by:
PspExitThread