Author: cgutman Date: Mon Feb 20 10:24:14 2012 New Revision: 55743
URL: http://svn.reactos.org/svn/reactos?rev=55743&view=rev Log: [NTOSKRNL] - First check if a driver object exists before trying to load the service module to properly handle boot drivers
Modified: trunk/reactos/ntoskrnl/io/iomgr/driver.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/driver.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/driver.c?... ============================================================================== --- trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] Mon Feb 20 10:24:14 2012 @@ -560,35 +560,25 @@ ServiceName.MaximumLength = ServiceName.Length = (USHORT)wcslen(Filters) * sizeof(WCHAR);
- /* Load and initialize the filter driver */ - Status = IopLoadServiceModule(&ServiceName, &ModuleObject); - if (Status != STATUS_IMAGE_ALREADY_LOADED) - { - if (!NT_SUCCESS(Status)) - continue; - - Status = IopInitializeDriverModule(DeviceNode, ModuleObject, &ServiceName, - FALSE, &DriverObject); - if (!NT_SUCCESS(Status)) - continue; - } - else - { - /* get existing DriverObject pointer */ - Status = IopGetDriverObject( - &DriverObject, - &ServiceName, - FALSE); - if (!NT_SUCCESS(Status)) - { - DPRINT1("IopGetDriverObject() returned status 0x%08x!\n", Status); - continue; - } - } - - Status = IopInitializeDevice(DeviceNode, DriverObject); - if (!NT_SUCCESS(Status)) - continue; + Status = IopGetDriverObject(&DriverObject, + &ServiceName, + FALSE); + if (!NT_SUCCESS(Status)) + { + /* Load and initialize the filter driver */ + Status = IopLoadServiceModule(&ServiceName, &ModuleObject); + if (!NT_SUCCESS(Status)) + continue; + + Status = IopInitializeDriverModule(DeviceNode, ModuleObject, &ServiceName, + FALSE, &DriverObject); + if (!NT_SUCCESS(Status)) + continue; + } + + Status = IopInitializeDevice(DeviceNode, DriverObject); + if (!NT_SUCCESS(Status)) + continue; }
return STATUS_SUCCESS;