Implement CancelIo properly.
diff --git a/files/file.c b/files/file.c
index 6ce32f9..ad0ee1c 100644
--- a/files/file.c
+++ b/files/file.c
@@ -1275,7 +1275,23 @@
*/
BOOL WINAPI CancelIo(HANDLE handle)
{
- return FILE_StartAsync(handle, NULL, ASYNC_TYPE_NONE, 0, STATUS_CANCELLED);
+ async_private *ovp,*t;
+
+ TRACE("handle = %x\n",handle);
+
+ ovp = NtCurrentTeb()->pending_list;
+ while(ovp)
+ {
+ t = ovp->next;
+ if(FILE_StartAsync(handle, ovp->lpOverlapped, ovp->type, 0, STATUS_CANCELLED))
+ {
+ TRACE("overlapped = %p\n",ovp->lpOverlapped);
+ finish_async(ovp, STATUS_CANCELLED);
+ }
+ ovp = t;
+ }
+ WaitForMultipleObjectsEx(0,NULL,FALSE,1,TRUE);
+ return TRUE;
}
/***********************************************************************