[PATCH v3 8/8] kernel32: Implement GetQueuedCompletionStatusEx().
Zebediah Figura
z.figura12 at gmail.com
Sun Sep 30 16:59:49 CDT 2018
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43878
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
.../api-ms-win-core-io-l1-1-0.spec | 2 +-
.../api-ms-win-core-io-l1-1-1.spec | 2 +-
dlls/kernel32/kernel32.spec | 2 +-
dlls/kernel32/sync.c | 19 +++++++++++++++++++
dlls/kernelbase/kernelbase.spec | 2 +-
include/winbase.h | 1 +
6 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/api-ms-win-core-io-l1-1-0/api-ms-win-core-io-l1-1-0.spec b/dlls/api-ms-win-core-io-l1-1-0/api-ms-win-core-io-l1-1-0.spec
index f73e427..ea0fd94 100644
--- a/dlls/api-ms-win-core-io-l1-1-0/api-ms-win-core-io-l1-1-0.spec
+++ b/dlls/api-ms-win-core-io-l1-1-0/api-ms-win-core-io-l1-1-0.spec
@@ -3,5 +3,5 @@
@ stdcall DeviceIoControl(long long ptr long ptr long ptr ptr) kernel32.DeviceIoControl
@ stdcall GetOverlappedResult(long ptr ptr long) kernel32.GetOverlappedResult
@ stdcall GetQueuedCompletionStatus(long ptr ptr ptr long) kernel32.GetQueuedCompletionStatus
-@ stub GetQueuedCompletionStatusEx
+@ stdcall GetQueuedCompletionStatusEx(ptr ptr long ptr long long) kernel32.GetQueuedCompletionStatusEx
@ stdcall PostQueuedCompletionStatus(long long ptr ptr) kernel32.PostQueuedCompletionStatus
diff --git a/dlls/api-ms-win-core-io-l1-1-1/api-ms-win-core-io-l1-1-1.spec b/dlls/api-ms-win-core-io-l1-1-1/api-ms-win-core-io-l1-1-1.spec
index 73aae1a..907c0b4 100644
--- a/dlls/api-ms-win-core-io-l1-1-1/api-ms-win-core-io-l1-1-1.spec
+++ b/dlls/api-ms-win-core-io-l1-1-1/api-ms-win-core-io-l1-1-1.spec
@@ -6,5 +6,5 @@
@ stdcall GetOverlappedResult(long ptr ptr long) kernel32.GetOverlappedResult
@ stub GetOverlappedResultEx
@ stdcall GetQueuedCompletionStatus(long ptr ptr ptr long) kernel32.GetQueuedCompletionStatus
-@ stub GetQueuedCompletionStatusEx
+@ stdcall GetQueuedCompletionStatusEx(ptr ptr long ptr long long) kernel32.GetQueuedCompletionStatusEx
@ stdcall PostQueuedCompletionStatus(long long ptr ptr) kernel32.PostQueuedCompletionStatus
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 9db7d98..e17ee97 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -804,7 +804,7 @@
@ stdcall GetProfileStringA(str str str ptr long)
@ stdcall GetProfileStringW(wstr wstr wstr ptr long)
@ stdcall GetQueuedCompletionStatus(long ptr ptr ptr long)
-# @ stub GetQueuedCompletionStatusEx
+@ stdcall GetQueuedCompletionStatusEx(ptr ptr long ptr long long)
@ stub -i386 GetSLCallbackTarget
@ stub -i386 GetSLCallbackTemplate
@ stdcall GetShortPathNameA(str ptr long)
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c
index 1345aca..517ee3f 100644
--- a/dlls/kernel32/sync.c
+++ b/dlls/kernel32/sync.c
@@ -2389,6 +2389,25 @@ BOOL WINAPI GetQueuedCompletionStatus( HANDLE CompletionPort, LPDWORD lpNumberOf
return FALSE;
}
+/******************************************************************************
+ * GetQueuedCompletionStatusEx (KERNEL32.@)
+ */
+BOOL WINAPI GetQueuedCompletionStatusEx( HANDLE port, OVERLAPPED_ENTRY *entries, ULONG count,
+ ULONG *written, DWORD timeout, BOOL alertable )
+{
+ LARGE_INTEGER time;
+ NTSTATUS ret;
+
+ TRACE("%p %p %u %p %u %u\n", port, entries, count, written, timeout, alertable);
+
+ ret = NtRemoveIoCompletionEx( port, (FILE_IO_COMPLETION_INFORMATION *)entries, count,
+ written, get_nt_timeout( &time, timeout ), alertable );
+ if (ret == STATUS_SUCCESS) return TRUE;
+ else if (ret == STATUS_TIMEOUT) SetLastError( WAIT_TIMEOUT );
+ else if (ret == STATUS_USER_APC) SetLastError( WAIT_IO_COMPLETION );
+ else SetLastError( RtlNtStatusToDosError(ret) );
+ return FALSE;
+}
/******************************************************************************
* PostQueuedCompletionStatus (KERNEL32.@)
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index 2980576..7fa8c1d 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -645,7 +645,7 @@
# @ stub GetPublisherCacheFolder
# @ stub GetPublisherRootFolder
@ stdcall GetQueuedCompletionStatus(long ptr ptr ptr long) kernel32.GetQueuedCompletionStatus
-@ stub GetQueuedCompletionStatusEx
+@ stdcall GetQueuedCompletionStatusEx(ptr ptr long ptr long long) kernel32.GetQueuedCompletionStatusEx
# @ stub GetRegistryExtensionFlags
# @ stub GetRoamingLastObservedChangeTime
@ stdcall GetSecurityDescriptorControl(ptr ptr ptr) advapi32.GetSecurityDescriptorControl
diff --git a/include/winbase.h b/include/winbase.h
index de52e5a..ea450e1 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2205,6 +2205,7 @@ WINBASEAPI INT WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT)
WINBASEAPI INT WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT);
#define GetProfileString WINELIB_NAME_AW(GetProfileString)
WINBASEAPI BOOL WINAPI GetQueuedCompletionStatus(HANDLE,LPDWORD,PULONG_PTR,LPOVERLAPPED*,DWORD);
+WINBASEAPI BOOL WINAPI GetQueuedCompletionStatusEx(HANDLE,OVERLAPPED_ENTRY*,ULONG,ULONG*,DWORD,BOOL);
WINADVAPI BOOL WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
WINADVAPI BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);
WINADVAPI BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);
--
2.7.4
More information about the wine-devel
mailing list