[PATCH v2 6/8] ntdll: Implement NtRemoveIoCompletionEx().
Zebediah Figura
z.figura12 at gmail.com
Sat Sep 29 23:29:19 CDT 2018
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/ntdll/ntdll.spec | 1 +
dlls/ntdll/sync.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 5e7c463..37e4e8e 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -308,6 +308,7 @@
@ stub NtReleaseProcessMutant
@ stdcall NtReleaseSemaphore(long long ptr)
@ stdcall NtRemoveIoCompletion(ptr ptr ptr ptr ptr)
+@ stdcall NtRemoveIoCompletionEx(ptr ptr long ptr ptr long)
# @ stub NtRemoveProcessDebug
@ stdcall NtRenameKey(long ptr)
@ stdcall NtReplaceKey(ptr long ptr)
diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
index bb462f2..4ae8e36 100644
--- a/dlls/ntdll/sync.c
+++ b/dlls/ntdll/sync.c
@@ -1334,6 +1334,54 @@ NTSTATUS WINAPI NtRemoveIoCompletion( HANDLE CompletionPort, PULONG_PTR Completi
}
/******************************************************************
+ * NtRemoveIoCompletionEx (NTDLL.@)
+ * ZwRemoveIoCompletionEx (NTDLL.@)
+ */
+NTSTATUS WINAPI NtRemoveIoCompletionEx( HANDLE port, FILE_IO_COMPLETION_INFORMATION *info, ULONG count,
+ ULONG *written, LARGE_INTEGER *timeout, BOOLEAN alertable )
+{
+ NTSTATUS ret;
+ ULONG i = 0;
+
+ TRACE("%p %p %u %p %p %u\n", port, info, count, written, timeout, alertable);
+
+ for (;;)
+ {
+ for (;;)
+ {
+ SERVER_START_REQ( remove_completion )
+ {
+ req->handle = wine_server_obj_handle( port );
+ if (!(ret = wine_server_call( req )))
+ {
+ info[i].CompletionKey = reply->ckey;
+ info[i].CompletionValue = reply->cvalue;
+ info[i].IoStatusBlock.Information = reply->information;
+ info[i].IoStatusBlock.u.Status = reply->status;
+ }
+ }
+ SERVER_END_REQ;
+
+ if (ret != STATUS_SUCCESS) break;
+
+ if (i++ >= count) break;
+ }
+
+ if (i && ret == STATUS_PENDING)
+ {
+ ret = STATUS_SUCCESS;
+ break;
+ }
+
+ ret = NtWaitForSingleObject( port, alertable, timeout );
+ if (ret != WAIT_OBJECT_0) break;
+ }
+
+ *written = i ? i : 1;
+ return ret;
+}
+
+/******************************************************************
* NtOpenIoCompletion (NTDLL.@)
* ZwOpenIoCompletion (NTDLL.@)
*
--
2.7.4
More information about the wine-devel
mailing list