[ros-diffs] [hpoussin] 20394: - Add a minimal implementation of SetupScanFileQueueW

hpoussin at svn.reactos.com hpoussin at svn.reactos.com
Wed Dec 28 15:21:09 CET 2005


- Add a minimal implementation of SetupScanFileQueueW
- In SetupDiBuildDriverInfoList, add found drivers in the right driver
list
- In SetupDiEnumDriverInfoW, enumerate the right driver list if
DeviceInfoData is not NULL
Modified: trunk/reactos/lib/setupapi/devinst.c
Modified: trunk/reactos/lib/setupapi/queue.c
  _____  

Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c	2005-12-28 13:27:40 UTC
(rev 20393)
+++ trunk/reactos/lib/setupapi/devinst.c	2005-12-28 14:21:05 UTC
(rev 20394)
@@ -5389,6 +5389,7 @@

         SetLastError(ERROR_INVALID_USER_BUFFER);
     else
     {
+        PLIST_ENTRY pDriverListHead = &list->DriverListHead;
         BOOL Result;
 
         InstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS_W);
@@ -5396,6 +5397,13 @@
         if (!Result)
             goto done;
 
+        if (DeviceInfoData)
+        {
+            struct DeviceInfoElement *devInfo = (struct
DeviceInfoElement *)DeviceInfoData->Reserved;
+            if (!(devInfo->CreationFlags & DICD_INHERIT_CLASSDRVS))
+                pDriverListHead = &devInfo->DriverListHead;
+        }
+
         if (DriverType == SPDIT_COMPATDRIVER)
         {
             /* Get hardware IDs list */
@@ -5633,7 +5641,7 @@
                         {
                             /* FIXME: read [ControlFlags] /
ExcludeFromSelect */
                             if (!AddDriverToList(
-                                &list->DriverListHead,
+                                pDriverListHead,
                                 DriverType,
                                 &ClassGuid,
                                 ContextDevice,
@@ -5689,7 +5697,7 @@
                                     if (wcsicmp(DeviceId, currentId) ==
0)
                                     {
                                         AddDriverToList(
-                                            &((struct DeviceInfoElement
*)DeviceInfoData->Reserved)->DriverListHead,
+                                            pDriverListHead,
                                             DriverType,
                                             &ClassGuid,
                                             ContextDevice,
@@ -5710,7 +5718,7 @@
                                         if (wcsicmp(DeviceId,
currentId) == 0)
                                         {
                                             AddDriverToList(
-                                                &((struct
DeviceInfoElement *)DeviceInfoData->Reserved)->DriverListHead,
+                                                pDriverListHead,
                                                 DriverType,
                                                 &ClassGuid,
                                                 ContextDevice,
@@ -6106,8 +6114,6 @@
         SetLastError(ERROR_INVALID_HANDLE);
     else if (DriverType != SPDIT_CLASSDRIVER && DriverType !=
SPDIT_COMPATDRIVER)
         SetLastError(ERROR_INVALID_PARAMETER);
-    else if (DriverType == SPDIT_CLASSDRIVER && DeviceInfoData)
-        SetLastError(ERROR_INVALID_PARAMETER);
     else if (DriverType == SPDIT_COMPATDRIVER && !DeviceInfoData)
         SetLastError(ERROR_INVALID_PARAMETER);
     else if (DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V1_W) &&
DriverInfoData->cbSize != sizeof(SP_DRVINFO_DATA_V2_W))
@@ -6118,8 +6124,7 @@
         PLIST_ENTRY ItemList;
         if (DeviceInfoData)
             devInfo = (struct DeviceInfoElement
*)DeviceInfoData->Reserved;
-        if (DriverType == SPDIT_CLASSDRIVER ||
-            (devInfo && devInfo->CreationFlags &
DICD_INHERIT_CLASSDRVS))
+        if (!devInfo || (devInfo->CreationFlags &
DICD_INHERIT_CLASSDRVS))
         {
             ListHead = &((struct DeviceInfoSet
*)DeviceInfoSet)->DriverListHead;
         }
  _____  

Modified: trunk/reactos/lib/setupapi/queue.c
--- trunk/reactos/lib/setupapi/queue.c	2005-12-28 13:27:40 UTC (rev
20393)
+++ trunk/reactos/lib/setupapi/queue.c	2005-12-28 14:21:05 UTC (rev
20394)
@@ -1200,11 +1200,43 @@

 
/***********************************************************************
  *            SetupScanFileQueueW   (SETUPAPI.@)
  */
-BOOL WINAPI SetupScanFileQueueW( HSPFILEQ queue, DWORD flags, HWND
window,
+BOOL WINAPI SetupScanFileQueueW( HSPFILEQ handle, DWORD flags, HWND
window,
                                  PSP_FILE_CALLBACK_W callback, PVOID
context, PDWORD result )
 {
-    FIXME("stub\n");
-    return FALSE;
+    struct file_queue *queue = handle;
+    struct file_op *op;
+    BOOL allnodesprocessed = FALSE;
+    FILEPATHS_W paths;
+
+    paths.Source = paths.Target = NULL;
+    *result = FALSE;
+
+    if ( flags & (SPQ_SCAN_FILE_PRESENCE | SPQ_SCAN_FILE_VALIDITY |
SPQ_SCAN_USE_CALLBACKEX | SPQ_SCAN_INFORM_USER |
SPQ_SCAN_PRUNE_COPY_QUEUE /*| SPQ_SCAN_USE_CALLBACK_SIGNERINFO |
SPQ_SCAN_PRUNE_DELREN*/) )
+    {
+        FIXME( "flags ignored 0x%lx\n", flags & (SPQ_SCAN_FILE_PRESENCE
| SPQ_SCAN_FILE_VALIDITY | SPQ_SCAN_USE_CALLBACKEX |
SPQ_SCAN_INFORM_USER | SPQ_SCAN_PRUNE_COPY_QUEUE /*|
SPQ_SCAN_USE_CALLBACK_SIGNERINFO | SPQ_SCAN_PRUNE_DELREN*/) );
+    }
+
+    if (queue->copy_queue.count)
+    {
+        for (op = queue->copy_queue.head; op; op = op->next)
+        {
+            build_filepathsW( op, &paths );
+            if (flags & SPQ_SCAN_USE_CALLBACK)
+            {
+                /* FIXME: sometimes set param 2 to SPQ_DELAYED_COPY */
+                if (NO_ERROR != callback( context,
SPFILENOTIFY_QUEUESCAN, (UINT)paths.Target, 0 ))
+                    goto done;
+            }
+        }
+    }
+
+    *result = TRUE;
+    allnodesprocessed = TRUE;
+
+ done:
+    HeapFree( GetProcessHeap(), 0, (void *)paths.Source );
+    HeapFree( GetProcessHeap(), 0, (void *)paths.Target );
+    return allnodesprocessed;
 }
 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051228/0f15feef/attachment.html


More information about the Ros-diffs mailing list