internal FileIoCompletionResult(FileIoCompletionInformation result) { KeyContext = result.KeyContext; ApcContext = result.ApcContext; IoStatusBlock = new IoStatus() { Information = result.IoStatusBlock.Information, Pointer = result.IoStatusBlock.Pointer }; }
/// <summary> /// Remove multiple queued status from the queue. /// </summary> /// <param name="max_count">Maximum number of status to remove.</param> /// <param name="timeout">An optional timeout.</param> /// <param name="alertable">Indicate whether the wait is alertable.</param> /// <param name="throw_on_error">True to throw on error.</param> /// <returns>Array of completion results. Length can be <= max_count.</returns> public NtResult <FileIoCompletionResult[]> Remove(int max_count, NtWaitTimeout timeout, bool alertable, bool throw_on_error) { IoStatus io_status = new IoStatus(); FileIoCompletionInformation[] result = new FileIoCompletionInformation[max_count]; return(NtSystemCalls.NtRemoveIoCompletionEx(Handle, result, max_count, out int result_count, timeout.ToLargeInteger(), alertable).CreateResult(throw_on_error, () => result.Take(result_count).Select(r => new FileIoCompletionResult(r)).ToArray())); }
/// <summary> /// Remove multiple queued status from the queue. /// </summary> /// <param name="max_count">Maximum number of status to remove.</param> /// <param name="timeout">An optional timeout.</param> /// <param name="alertable">Indicate whether the wait is alertable.</param> /// <returns>Array of completion results. Length can be <= max_count. If timeout then returns an empty array.</returns> public FileIoCompletionResult[] Remove(int max_count, NtWaitTimeout timeout, bool alertable) { IoStatus io_status = new IoStatus(); FileIoCompletionInformation[] result = new FileIoCompletionInformation[max_count]; int result_count = 0; NtStatus status = NtSystemCalls.NtRemoveIoCompletionEx(Handle, result, max_count, out result_count, timeout.ToLargeInteger(), alertable).ToNtException(); if (status == NtStatus.STATUS_SUCCESS) { return(result.Take(result_count).Select(r => new FileIoCompletionResult(r)).ToArray()); } return(new FileIoCompletionResult[0]); }