From f2162e833534a8b0002b2a673794950c69b5ac10 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 20 Mar 2012 17:04:36 +0000 Subject: [PATCH] [NTOSKRNL] - Fix opening of handles to enumerated devices (revert 53351 which ironically fixed this same bug) - Fixes bug 6939 svn path=/trunk/; revision=56196 --- reactos/ntoskrnl/po/events.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/po/events.c b/reactos/ntoskrnl/po/events.c index 4f021e567bc..6781c68ee83 100644 --- a/reactos/ntoskrnl/po/events.c +++ b/reactos/ntoskrnl/po/events.c @@ -162,6 +162,8 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure, BOOLEAN Arrival; ULONG Caps; NTSTATUS Status; + UNICODE_STRING DeviceName; + UNICODE_STRING DeviceNamePrefix = RTL_CONSTANT_STRING(L"\\??\\"); DPRINT("PopAddRemoveSysCapsCallback(%p %p)\n", NotificationStructure, Context); @@ -182,10 +184,20 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure, { DPRINT("Arrival of %wZ\n", Notification->SymbolicLinkName); + DeviceName.Length = 0; + DeviceName.MaximumLength = Notification->SymbolicLinkName->MaximumLength + DeviceNamePrefix.MaximumLength; + DeviceName.Buffer = ExAllocatePool(PagedPool, DeviceName.MaximumLength); + if (!DeviceName.Buffer) return STATUS_INSUFFICIENT_RESOURCES; + + RtlCopyUnicodeString(&DeviceName, &DeviceNamePrefix); + RtlAppendUnicodeStringToString(&DeviceName, Notification->SymbolicLinkName); + + DPRINT("Opening handle to %wZ\n", &DeviceName); + /* Open the device */ InitializeObjectAttributes( &ObjectAttributes, - Notification->SymbolicLinkName, + &DeviceName, OBJ_KERNEL_HANDLE, NULL, NULL); @@ -196,6 +208,7 @@ PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure, &IoStatusBlock, FILE_SHARE_READ | FILE_SHARE_WRITE, 0); + RtlFreeUnicodeString(&DeviceName); if (!NT_SUCCESS(Status)) { DPRINT1("ZwOpenFile() failed with status 0x%08lx\n", Status);