From 94da11bec854816d470d9a3da88f7899da7f0357 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 20 Feb 2012 10:24:14 +0000 Subject: [PATCH] [NTOSKRNL] - First check if a driver object exists before trying to load the service module to properly handle boot drivers svn path=/trunk/; revision=55743 --- reactos/ntoskrnl/io/iomgr/driver.c | 44 ++++++++++++------------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/reactos/ntoskrnl/io/iomgr/driver.c b/reactos/ntoskrnl/io/iomgr/driver.c index 54d74489330..c9e09cf3ce2 100644 --- a/reactos/ntoskrnl/io/iomgr/driver.c +++ b/reactos/ntoskrnl/io/iomgr/driver.c @@ -560,35 +560,25 @@ IopAttachFilterDriversCallback( 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 = 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; - } - else - { - /* get existing DriverObject pointer */ - Status = IopGetDriverObject( - &DriverObject, - &ServiceName, - FALSE); - if (!NT_SUCCESS(Status)) - { - DPRINT1("IopGetDriverObject() returned status 0x%08x!\n", Status); - continue; - } - } + Status = IopInitializeDriverModule(DeviceNode, ModuleObject, &ServiceName, + FALSE, &DriverObject); + if (!NT_SUCCESS(Status)) + continue; + } - Status = IopInitializeDevice(DeviceNode, DriverObject); - if (!NT_SUCCESS(Status)) - continue; + Status = IopInitializeDevice(DeviceNode, DriverObject); + if (!NT_SUCCESS(Status)) + continue; } return STATUS_SUCCESS;