Mike Kaplinskiy : kernel32: Implement CancelIoEx.

Alexandre Julliard julliard at winehq.org
Tue Aug 18 10:01:27 CDT 2009


Module: wine
Branch: master
Commit: a5c03fbc72f5b084723a7f1181d90731abea8872
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a5c03fbc72f5b084723a7f1181d90731abea8872

Author: Mike Kaplinskiy <mike.kaplinskiy at gmail.com>
Date:   Sun Aug  9 00:12:52 2009 -0400

kernel32: Implement CancelIoEx.

---

 dlls/kernel32/file.c        |   26 ++++++++++++++++++++++++++
 dlls/kernel32/kernel32.spec |    1 +
 include/winbase.h           |    1 +
 3 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c
index 9742964..d9fbddb 100644
--- a/dlls/kernel32/file.c
+++ b/dlls/kernel32/file.c
@@ -625,6 +625,32 @@ BOOL WINAPI GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped,
 }
 
 /***********************************************************************
+ *             CancelIoEx                 (KERNEL32.@)
+ *
+ * Cancels pending I/O operations on a file given the overlapped used.
+ *
+ * PARAMS
+ *  handle        [I] File handle.
+ *  lpOverlapped  [I,OPT] pointer to overlapped (if null, cancel all)
+ *
+ * RETURNS
+ *  Success: TRUE.
+ *  Failure: FALSE, check GetLastError().
+ */
+BOOL WINAPI CancelIoEx(HANDLE handle, LPOVERLAPPED lpOverlapped)
+{
+    IO_STATUS_BLOCK    io_status;
+
+    NtCancelIoFileEx(handle, (PIO_STATUS_BLOCK) lpOverlapped, &io_status);
+    if (io_status.u.Status)
+    {
+        SetLastError( RtlNtStatusToDosError( io_status.u.Status ) );
+        return FALSE;
+    }
+    return TRUE;
+}
+
+/***********************************************************************
  *             CancelIo                   (KERNEL32.@)
  *
  * Cancels pending I/O operations initiated by the current thread on a file.
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 2fd1b10..458a47d 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -177,6 +177,7 @@
 @ stdcall CallNamedPipeW(wstr ptr long ptr long ptr long)
 @ stub CancelDeviceWakeupRequest
 @ stdcall CancelIo(long)
+@ stdcall CancelIoEx(long ptr)
 # @ stub CancelTimerQueueTimer
 @ stdcall CancelWaitableTimer(long)
 @ stdcall ChangeTimerQueueTimer(ptr ptr long long)
diff --git a/include/winbase.h b/include/winbase.h
index 9e52bde..791d58e 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1323,6 +1323,7 @@ WINBASEAPI BOOL        WINAPI CallNamedPipeA(LPCSTR,LPVOID,DWORD,LPVOID,DWORD,LP
 WINBASEAPI BOOL        WINAPI CallNamedPipeW(LPCWSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);
 #define                       CallNamedPipe WINELIB_NAME_AW(CallNamedPipe)
 WINBASEAPI BOOL        WINAPI CancelIo(HANDLE);
+WINBASEAPI BOOL        WINAPI CancelIoEx(HANDLE,LPOVERLAPPED);
 WINBASEAPI BOOL        WINAPI CancelWaitableTimer(HANDLE);
 WINBASEAPI BOOL        WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG);
 WINADVAPI  BOOL        WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL);




More information about the wine-cvs mailing list