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.…
==============================================================================
--- 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) ||