[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH v3 8/8] kernel32: Implement GetQueuedCompletionStatusEx().
From:       Zebediah Figura <z.figura12 () gmail ! com>
Date:       2018-09-30 21:59:49
Message-ID: 1538344789-20462-8-git-send-email-z.figura12 () gmail ! com
[Download RAW message or body]

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43878
Signed-off-by: Zebediah Figura <z.figura12@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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic