Author: cgutman Date: Tue Mar 20 17:04:36 2012 New Revision: 56196
URL: http://svn.reactos.org/svn/reactos?rev=56196&view=rev Log: [NTOSKRNL] - Fix opening of handles to enumerated devices (revert 53351 which ironically fixed this same bug) - Fixes bug 6939
Modified: trunk/reactos/ntoskrnl/po/events.c
Modified: trunk/reactos/ntoskrnl/po/events.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/po/events.c?rev=56... ============================================================================== --- trunk/reactos/ntoskrnl/po/events.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/po/events.c [iso-8859-1] Tue Mar 20 17:04:36 2012 @@ -162,6 +162,8 @@ 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 @@ { 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 @@ &IoStatusBlock, FILE_SHARE_READ | FILE_SHARE_WRITE, 0); + RtlFreeUnicodeString(&DeviceName); if (!NT_SUCCESS(Status)) { DPRINT1("ZwOpenFile() failed with status 0x%08lx\n", Status);