[ros-diffs] [cgutman] 56240: [NTOSKRNL] - Flag the device node if it fails post-start - Remove the device's children when responding to PNP_DEVICE_REMOVED

cgutman at svn.reactos.org cgutman at svn.reactos.org
Mon Mar 26 22:57:01 UTC 2012


Author: cgutman
Date: Mon Mar 26 22:57:01 2012
New Revision: 56240

URL: http://svn.reactos.org/svn/reactos?rev=56240&view=rev
Log:
[NTOSKRNL]
- Flag the device node if it fails post-start
- Remove the device's children when responding to PNP_DEVICE_REMOVED

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=56240&r1=56239&r2=56240&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] Mon Mar 26 22:57:01 2012
@@ -4044,8 +4044,13 @@
     if ((PnPFlags & PNP_DEVICE_REMOVED) ||
         ((PnPFlags & PNP_DEVICE_FAILED) && !(PnPFlags & PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED)))
     {
-        /* Surprise removal */
-        
+        /* Flag it if it's failed */
+        if (PnPFlags & PNP_DEVICE_FAILED) DeviceNode->Problem = CM_PROB_FAILED_POST_START;
+
+        /* Send removal IRPs to all of its children */
+        IopPrepareDeviceForRemoval(PhysicalDeviceObject, TRUE);
+
+        /* Send surprise removal */
         IopSendSurpriseRemoval(PhysicalDeviceObject);
         
         /* Tell the user-mode PnP manager that a device was removed */
@@ -4057,7 +4062,6 @@
     else if ((PnPFlags & PNP_DEVICE_FAILED) && (PnPFlags & PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED))
     {
         /* Stop for resource rebalance */
-        
         Status = IopStopDevice(DeviceNode);
         if (!NT_SUCCESS(Status))
         {




More information about the Ros-diffs mailing list