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