Mike McCormack : kernel: Partially implement ReadDirectoryChangesW
using NtNotifyChangeDirectoryFile.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jan 27 12:27:38 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 700575955782bed874734610476aab6c8826f775
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=700575955782bed874734610476aab6c8826f775
Author: Mike McCormack <mike at codeweavers.com>
Date: Fri Jan 27 19:19:46 2006 +0100
kernel: Partially implement ReadDirectoryChangesW using NtNotifyChangeDirectoryFile.
---
dlls/kernel/change.c | 29 +++++++++++++++++++++++++----
1 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel/change.c b/dlls/kernel/change.c
index 1f1b162..b2fed36 100644
--- a/dlls/kernel/change.c
+++ b/dlls/kernel/change.c
@@ -31,7 +31,6 @@
#include "winerror.h"
#include "winternl.h"
#include "kernel_private.h"
-#include "wine/server.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(file);
@@ -129,9 +128,31 @@ BOOL WINAPI ReadDirectoryChangesW( HANDL
DWORD filter, LPDWORD returned, LPOVERLAPPED overlapped,
LPOVERLAPPED_COMPLETION_ROUTINE completion )
{
- FIXME( "%p %p 0x%08lx %d 0x%08lx %p %p %p\n", handle, buffer, len, subtree, filter,
+ IO_STATUS_BLOCK io;
+ NTSTATUS status;
+ BOOL ret = TRUE;
+ HANDLE event;
+
+ TRACE("%p %p %08lx %d %08lx %p %p %p\n", handle, buffer, len, subtree, filter,
returned, overlapped, completion );
- SetLastError( ERROR_INVALID_FUNCTION );
- return FALSE;
+ if (overlapped)
+ event = overlapped->hEvent;
+ else
+ event = CreateEventW( NULL, 0, 0, NULL );
+
+ status = NtNotifyChangeDirectoryFile( handle, event, NULL, NULL,
+ &io, buffer, len, filter, subtree );
+ if (status != STATUS_PENDING)
+ {
+ SetLastError( RtlNtStatusToDosError(status) );
+ ret = FALSE;
+ }
+ else if (!overlapped)
+ WaitForSingleObject( event, INFINITE );
+
+ if (!overlapped)
+ CloseHandle( event );
+
+ return ret;
}
More information about the wine-cvs
mailing list