NtCancelIoFileEx

NTSTATUS __stdcall NtCancelIoFileEx(
        PVOID FileHandle,
        IO_STATUS_BLOCK *IoRequestToCancel,
        IO_STATUS_BLOCK *IoStatusBlock){
  INT8 v5; 
  __int64 v6; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  FILE_OBJECT *v9; 
  int v10; 
  int v11; 
  PADAPTER_OBJECT DmaAdapter; 
  DmaAdapter = 0i64;
  v5 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( v5 )
  {
    v6 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)IoStatusBlock < 0x7FFFFFFF0000i64 )
      v6 = (__int64)IoStatusBlock;
    *(_DWORD *)v6 = *(_DWORD *)v6;
  }
  result = IopReferenceFileObject(FileHandle, 0i64, v5, (FILE_OBJECT **)&DmaAdapter, 0i64);
  if( result >= 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    ++*((_QWORD *)CurrentThread + 114);
    __incgsdword(0x2EE4u);
    v9 = (FILE_OBJECT *)DmaAdapter;
    v10 = IopCancelIrpsInFileObjectList(
            (_FILE_OBJECT *)DmaAdapter,
            *((_EPROCESS **)KeGetCurrentThread() + 23),
            IoRequestToCancel,
            0i64,
            0,
            0);
    v11 = v10;
    if( !IoRequestToCancel || !v10 )
      v11 = IopCancelIrpsInThreadListForCurrentProcess(v9, IoRequestToCancel) | v10;
    IoStatusBlock->Status = v11 == 0 ? 0xC0000225 : 0;
    IoStatusBlock->Information = 0i64;
    HalPutDmaAdapter((PADAPTER_OBJECT)v9);
    return v11 == 0 ? 0xC0000225 : 0;
  }
  return result;
}

Referenced by:

No references.