diff --git a/dlls/kernel/kernel32.spec b/dlls/kernel/kernel32.spec
index 45f2c546b19aececc2d693df98cbb60f98d08784..4b1c37de1a6f5bbdc2fae8d7c0b94c3d04333687 100644
--- a/dlls/kernel/kernel32.spec
+++ b/dlls/kernel/kernel32.spec
@@ -900,7 +900,7 @@ debug_channels (comm debugstr dll int resource stress thunk toolhelp win32)
 @ stub WriteConsoleInputVDMW
 
 # NT 4.0 additions
-@ stub CancelIo
+@ stdcall CancelIo(long) CancelIo
 @ stdcall CancelWaitableTimer(long) CancelWaitableTimer
 @ stdcall CopyFileExA (str str ptr ptr ptr long) CopyFileExA
 @ stdcall CopyFileExW (wstr wstr ptr ptr ptr long) CopyFileExW
diff --git a/files/file.c b/files/file.c
index 4812d892bb88bc4b3664ceda31a1b2bd10a6a545..a9cedb320c2674d000a12674970f8d378507793a 100644
--- a/files/file.c
+++ b/files/file.c
@@ -1237,6 +1237,15 @@ BOOL WINAPI GetOverlappedResult(
 }
 
 
+/***********************************************************************
+ *             CancelIo                   (KERNEL32.@)
+ */
+BOOL WINAPI CancelIo(HANDLE handle)
+{
+    FIXME("(%d) stub\n",handle);
+    return FALSE;
+}
+
 /***********************************************************************
  *             FILE_AsyncReadService      (INTERNAL)
  *
diff --git a/include/winbase.h b/include/winbase.h
index 083139c021ee9a05454b3131d806ad9f84c2e24f..eb8172df23b6e8d9a1195ccd396124b3b367b4a7 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1243,6 +1243,7 @@ BOOL        WINAPI BuildCommDCBW(LPCWSTR,LPDCB);
 BOOL        WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS);
 BOOL        WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS);
 #define     BuildCommDCBAndTimeouts WINELIB_NAME_AW(BuildCommDCBAndTimeouts)
+BOOL        WINAPI CancelIo(HANDLE);
 BOOL        WINAPI CancelWaitableTimer(HANDLE);
 BOOL        WINAPI ClearCommBreak(HANDLE);
 BOOL        WINAPI ClearCommError(HANDLE,LPDWORD,LPCOMSTAT);