Hans Leidekker : setupapi:
Add a partial implementation for SetupScanFileQueue{A, W}.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 18 08:03:58 CDT 2007
Module: wine
Branch: master
Commit: 6cc0b4e88e34ac61cf45c7caac6a0be8b5cfec9e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6cc0b4e88e34ac61cf45c7caac6a0be8b5cfec9e
Author: Hans Leidekker <hans at it.vu.nl>
Date: Fri May 18 11:39:04 2007 +0200
setupapi: Add a partial implementation for SetupScanFileQueue{A, W}.
---
dlls/setupapi/queue.c | 77 +++++++++++++++++++++++++++++++++++++++++++------
include/setupapi.h | 7 ++++
2 files changed, 75 insertions(+), 9 deletions(-)
diff --git a/dlls/setupapi/queue.c b/dlls/setupapi/queue.c
index 0014a54..f9647ef 100644
--- a/dlls/setupapi/queue.c
+++ b/dlls/setupapi/queue.c
@@ -216,6 +216,7 @@ UINT CALLBACK QUEUE_callback_WtoA( void *context, UINT notification,
case SPFILENOTIFY_RENAMEERROR:
case SPFILENOTIFY_STARTCOPY:
case SPFILENOTIFY_ENDCOPY:
+ case SPFILENOTIFY_QUEUESCAN_EX:
{
FILEPATHS_W *pathsW = (FILEPATHS_W *)param1;
FILEPATHS_A pathsA;
@@ -249,8 +250,18 @@ UINT CALLBACK QUEUE_callback_WtoA( void *context, UINT notification,
}
break;
- case SPFILENOTIFY_NEEDMEDIA:
case SPFILENOTIFY_QUEUESCAN:
+ {
+ LPWSTR targetW = (LPWSTR)param1;
+ LPSTR target = strdupWtoA( targetW );
+
+ ret = callback_ctx->orig_handler( callback_ctx->orig_context, notification,
+ (UINT_PTR)target, param2 );
+ HeapFree( GetProcessHeap(), 0, target );
+ }
+ break;
+
+ case SPFILENOTIFY_NEEDMEDIA:
FIXME("mapping for %d not implemented\n",notification);
case SPFILENOTIFY_STARTQUEUE:
case SPFILENOTIFY_ENDQUEUE:
@@ -1203,22 +1214,70 @@ BOOL WINAPI SetupCommitFileQueueW( HWND owner, HSPFILEQ handle, PSP_FILE_CALLBAC
/***********************************************************************
* SetupScanFileQueueA (SETUPAPI.@)
*/
-BOOL WINAPI SetupScanFileQueueA( HSPFILEQ queue, DWORD flags, HWND window,
- PSP_FILE_CALLBACK_A callback, PVOID context, PDWORD result )
+BOOL WINAPI SetupScanFileQueueA( HSPFILEQ handle, DWORD flags, HWND window,
+ PSP_FILE_CALLBACK_A handler, PVOID context, PDWORD result )
{
- FIXME("stub\n");
- return FALSE;
+ struct callback_WtoA_context ctx;
+
+ TRACE("%p %x %p %p %p %p\n", handle, flags, window, handler, context, result);
+
+ ctx.orig_context = context;
+ ctx.orig_handler = handler;
+
+ return SetupScanFileQueueW( handle, flags, window, QUEUE_callback_WtoA, &ctx, result );
}
/***********************************************************************
* SetupScanFileQueueW (SETUPAPI.@)
*/
-BOOL WINAPI SetupScanFileQueueW( HSPFILEQ queue, DWORD flags, HWND window,
- PSP_FILE_CALLBACK_W callback, PVOID context, PDWORD result )
+BOOL WINAPI SetupScanFileQueueW( HSPFILEQ handle, DWORD flags, HWND window,
+ PSP_FILE_CALLBACK_W handler, PVOID context, PDWORD result )
{
- FIXME("stub\n");
- return FALSE;
+ struct file_queue *queue = handle;
+ struct file_op *op;
+ FILEPATHS_W paths;
+ UINT notification = 0;
+ BOOL ret = FALSE;
+
+ TRACE("%p %x %p %p %p %p\n", handle, flags, window, handler, context, result);
+
+ if (!queue->copy_queue.count) return TRUE;
+
+ if (flags & SPQ_SCAN_USE_CALLBACK) notification = SPFILENOTIFY_QUEUESCAN;
+ else if (flags & SPQ_SCAN_USE_CALLBACKEX) notification = SPFILENOTIFY_QUEUESCAN_EX;
+
+ if (flags & ~(SPQ_SCAN_USE_CALLBACK | SPQ_SCAN_USE_CALLBACKEX))
+ {
+ FIXME("flags %x not fully implemented\n", flags);
+ }
+
+ paths.Source = paths.Target = NULL;
+
+ for (op = queue->copy_queue.head; op; op = op->next)
+ {
+ build_filepathsW( op, &paths );
+ switch (notification)
+ {
+ case SPFILENOTIFY_QUEUESCAN:
+ /* FIXME: handle delay flag */
+ if (handler( context, notification, (UINT_PTR)paths.Target, 0 )) goto done;
+ break;
+ case SPFILENOTIFY_QUEUESCAN_EX:
+ if (handler( context, notification, (UINT_PTR)&paths, 0 )) goto done;
+ break;
+ default:
+ ret = TRUE; goto done;
+ }
+ }
+
+ ret = TRUE;
+
+ done:
+ if (result) *result = 0;
+ HeapFree( GetProcessHeap(), 0, (void *)paths.Source );
+ HeapFree( GetProcessHeap(), 0, (void *)paths.Target );
+ return ret;
}
diff --git a/include/setupapi.h b/include/setupapi.h
index 475ad75..2434639 100644
--- a/include/setupapi.h
+++ b/include/setupapi.h
@@ -437,6 +437,13 @@ DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_ORIGINAL_FILE_INFO)
#define SPOST_URL 2
#define SPOST_MAX 3
+#define SPQ_SCAN_FILE_PRESENCE 0x00000001
+#define SPQ_SCAN_FILE_VALIDITY 0x00000002
+#define SPQ_SCAN_USE_CALLBACK 0x00000004
+#define SPQ_SCAN_USE_CALLBACKEX 0x00000008
+#define SPQ_SCAN_INFORM_USER 0x00000010
+#define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020
+
#define FLG_ADDREG_DELREG_BIT 0x00008000
#define FLG_ADDREG_BINVALUETYPE 0x00000001
#define FLG_ADDREG_NOCLOBBER 0x00000002
More information about the wine-cvs
mailing list