[ros-diffs] [cgutman] 53350: [PNPMGR] - Fix a major logic bug in device tree traversal functions

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sun Aug 21 02:40:59 UTC 2011


Author: cgutman
Date: Sun Aug 21 02:40:58 2011
New Revision: 53350

URL: http://svn.reactos.org/svn/reactos?rev=53350&view=rev
Log:
[PNPMGR]
- Fix a major logic bug in device tree traversal functions

Modified:
    trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c

Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c?rev=53350&r1=53349&r2=53350&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] Sun Aug 21 02:40:58 2011
@@ -1346,10 +1346,7 @@
  *       Pointer to parent node to retrieve child node information for.
  *
  * Remarks
- *    We only return a status code indicating an error (STATUS_UNSUCCESSFUL)
- *    when we reach a device node which is not a direct child of the device
- *    node for which we retrieve information of child nodes for. Any errors
- *    that occur is logged instead so that all child services have a chance
+ *    Any errors that occur are logged instead so that all child services have a chance
  *    of being interrogated.
  */
 
@@ -1395,9 +1392,8 @@
 
    if (DeviceNode->Parent != ParentDeviceNode)
    {
-      /* Stop the traversal immediately and indicate successful operation */
-      DPRINT("Stop\n");
-      return STATUS_UNSUCCESSFUL;
+      DPRINT("Skipping 2+ level child\n");
+      return STATUS_SUCCESS;
    }
 
    /* Skip processing if it was already completed before */
@@ -1963,10 +1959,7 @@
  *       Pointer to parent node to retrieve child node configuration for.
  *
  * Remarks
- *    We only return a status code indicating an error (STATUS_UNSUCCESSFUL)
- *    when we reach a device node which is not a direct child of the device
- *    node for which we configure child services for. Any errors that occur is
- *    logged instead so that all child services have a chance of beeing
+ *    Any errors that occur are logged instead so that all child services have a chance of beeing
  *    configured.
  */
 
@@ -1999,11 +1992,11 @@
     * Make sure this device node is a direct child of the parent device node
     * that is given as an argument
     */
+
    if (DeviceNode->Parent != ParentDeviceNode)
    {
-      /* Stop the traversal immediately and indicate successful operation */
-      DPRINT("Stop\n");
-      return STATUS_UNSUCCESSFUL;
+      DPRINT("Skipping 2+ level child\n");
+      return STATUS_SUCCESS;
    }
 
    if (!(DeviceNode->Flags & (DNF_DISABLED | DNF_STARTED | DNF_ADDED)))
@@ -2096,10 +2089,7 @@
  *
  * Remarks
  *    If the driver image for a service is not loaded and initialized
- *    it is done here too. We only return a status code indicating an
- *    error (STATUS_UNSUCCESSFUL) when we reach a device node which is
- *    not a direct child of the device node for which we initialize
- *    child services for. Any errors that occur is logged instead so
+ *    it is done here too. Any errors that occur are logged instead so
  *    that all child services have a chance of being initialized.
  */
 
@@ -2132,11 +2122,8 @@
 
    if (DeviceNode->Parent != ParentDeviceNode)
    {
-      /*
-       * Stop the traversal immediately and indicate unsuccessful operation
-       */
-      DPRINT("Stop\n");
-      return STATUS_UNSUCCESSFUL;
+      DPRINT("Skipping 2+ level child\n");
+      return STATUS_SUCCESS;
    }
 
    if (IopDeviceNodeHasFlag(DeviceNode, DNF_STARTED) ||




More information about the Ros-diffs mailing list