NtCancelIoFileEx

NTSTATUS __stdcall NtCancelIoFileEx(
        VOID *FileHandle,
        _IO_STATUS_BLOCK *IoRequestToCancel,
        _IO_STATUS_BLOCK *IoStatusBlock){
  char PreviousMode; 
  __int64 v6; 
  NTSTATUS result; 
  _ETHREAD *CurrentThread; 
  _FILE_OBJECT *v9; 
  int v10; 
  _IO_STATUS_BLOCK *v11; 
  int v12; 
  _FILE_OBJECT *pFileObject; 

  pFileObject = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    v6 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)IoStatusBlock < 0x7FFFFFFF0000i64 )
      v6 = (__int64)IoStatusBlock;
    *(_DWORD *)v6 = *(_DWORD *)v6;
  }
  result = IopReferenceFileObject(FileHandle, 0i64, PreviousMode, &pFileObject, 0i64);
  if( result >= 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    ++CurrentThread->Tcb.OtherOperationCount;
    __incgsdword(0x2EE4u);
    v9 = pFileObject;
    v10 = IopCancelIrpsInFileObjectList(
            pFileObject,
            KeGetCurrentThread()->ApcState.Process,
            IoRequestToCancel,
            0i64,
            0,
            0);
    v12 = v10;
    if( !IoRequestToCancel || !v10 )
      v12 = IopCancelIrpsInThreadListForCurrentProcess(v9, IoRequestToCancel, v11) | v10;
    IoStatusBlock->Status = v12 == 0 ? 0xC0000225 : 0;
    IoStatusBlock->Information = 0i64;
    HalPutDmaAdapter((PADAPTER_OBJECT)v9);
    return v12 == 0 ? 0xC0000225 : 0;
  }
  return result;
}

Referenced by:

No references.