Author: fireball
Date: Wed Nov 22 13:15:51 2006
New Revision: 24798
URL:
http://svn.reactos.org/svn/reactos?rev=24798&view=rev
Log:
The code expects synchronous behaviour here, so until a better solution exists,
IoSynchronousInvalidateDeviceRelations() is going to be used.
This fixes the "Loading ndis.sys" problems.
Thanks to Dmitry Gorbachev, confirmed by Herve Poussineau.
See issue #1875 for more details.
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 (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c Wed Nov 22 13:15:51 2006
@@ -43,6 +43,13 @@
IN PDEVICE_OBJECT DeviceObject,
IN PVOID InvalidateContext);
+VOID
+NTAPI
+IoSynchronousInvalidateDeviceRelations(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN DEVICE_RELATION_TYPE Type);
+
+
/* FUNCTIONS *****************************************************************/
PDEVICE_NODE
@@ -144,7 +151,9 @@
if (IopDeviceNodeHasFlag(DeviceNode, DNF_NEED_ENUMERATION_ONLY))
{
DPRINT("Device needs enumeration, invalidating bus relations\n");
- IoInvalidateDeviceRelations(DeviceNode->PhysicalDeviceObject, BusRelations);
+ /* Invalidate device relations synchronously
+ (otherwise there will be dirty read of DeviceNode) */
+ IoSynchronousInvalidateDeviceRelations(DeviceNode->PhysicalDeviceObject,
BusRelations);
IopDeviceNodeClearFlag(DeviceNode, DNF_NEED_ENUMERATION_ONLY);
}
}