From 1f2f04ed9bc72e8a71926fa815c69e65de74e479 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 25 Sep 2010 21:49:15 +0000 Subject: [PATCH] [NTOSKRNL] IoRegisterPlugPlayNotification: Do not fail if no Interface can be found for the given GUID. Just do not call the Callback-Routine in this case. The Interface could be created later. svn path=/trunk/; revision=48896 --- reactos/ntoskrnl/io/pnpmgr/pnpnotify.c | 48 +++++++++++--------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c b/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c index 8a6dce72e95..6e43d7143cf 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpnotify.c @@ -290,36 +290,30 @@ IoRegisterPlugPlayNotification(IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, NULL, /* PhysicalDeviceObject OPTIONAL */ 0, /* Flags */ &SymbolicLinkList); - if (!NT_SUCCESS(Status)) + if (NT_SUCCESS(Status)) { - DPRINT("IoGetDeviceInterfaces() failed with status 0x%08lx\n", - Status); - ExFreePoolWithTag(Entry, TAG_PNP_NOTIFY); - ObDereferenceObject(DriverObject); - return Status; - } + /* Enumerate SymbolicLinkList */ + NotificationInfos.Version = 1; + NotificationInfos.Size = sizeof(DEVICE_INTERFACE_CHANGE_NOTIFICATION); + RtlCopyMemory(&NotificationInfos.Event, + &GUID_DEVICE_INTERFACE_ARRIVAL, + sizeof(GUID)); + RtlCopyMemory(&NotificationInfos.InterfaceClassGuid, + EventCategoryData, + sizeof(GUID)); + NotificationInfos.SymbolicLinkName = &SymbolicLinkU; + + for (SymbolicLink = SymbolicLinkList; + *SymbolicLink; + SymbolicLink += wcslen(SymbolicLink) + 1) + { + RtlInitUnicodeString(&SymbolicLinkU, SymbolicLink); + DPRINT("Calling callback routine for %S\n", SymbolicLink); + (*CallbackRoutine)(&NotificationInfos, Context); + } - /* Enumerate SymbolicLinkList */ - NotificationInfos.Version = 1; - NotificationInfos.Size = sizeof(DEVICE_INTERFACE_CHANGE_NOTIFICATION); - RtlCopyMemory(&NotificationInfos.Event, - &GUID_DEVICE_INTERFACE_ARRIVAL, - sizeof(GUID)); - RtlCopyMemory(&NotificationInfos.InterfaceClassGuid, - EventCategoryData, - sizeof(GUID)); - NotificationInfos.SymbolicLinkName = &SymbolicLinkU; - - for (SymbolicLink = SymbolicLinkList; - *SymbolicLink; - SymbolicLink += wcslen(SymbolicLink) + 1) - { - RtlInitUnicodeString(&SymbolicLinkU, SymbolicLink); - DPRINT("Calling callback routine for %S\n", SymbolicLink); - (*CallbackRoutine)(&NotificationInfos, Context); + ExFreePool(SymbolicLinkList); } - - ExFreePool(SymbolicLinkList); } Entry->PnpNotificationProc = CallbackRoutine; -- 2.17.1