Author: tfaber Date: Sun Mar 23 17:33:01 2014 New Revision: 62554
URL: http://svn.reactos.org/svn/reactos?rev=62554&view=rev Log: [NTOS:PO] - Fix symbolic link name handling in PopAddRemoveSysCapsCallback. Fixes ACPI power button. CORE-8017 #resolve
Modified: trunk/reactos/ntoskrnl/io/iomgr/deviface.c trunk/reactos/ntoskrnl/po/events.c
Modified: trunk/reactos/ntoskrnl/io/iomgr/deviface.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/deviface.... ============================================================================== --- trunk/reactos/ntoskrnl/io/iomgr/deviface.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/iomgr/deviface.c [iso-8859-1] Sun Mar 23 17:33:01 2014 @@ -739,7 +739,7 @@ if (ReturnBuffer.Length + KeyName.Length + sizeof(WCHAR) > ReturnBuffer.MaximumLength) { PWSTR NewBuffer; - ReturnBuffer.MaximumLength = (USHORT)max(ReturnBuffer.MaximumLength * sizeof(WCHAR), + ReturnBuffer.MaximumLength = (USHORT)max(2 * ReturnBuffer.MaximumLength, (USHORT)(ReturnBuffer.Length + KeyName.Length + 2 * sizeof(WCHAR))); @@ -800,6 +800,7 @@ }
/* Add final NULL to ReturnBuffer */ + NT_ASSERT(ReturnBuffer.Length <= ReturnBuffer.MaximumLength); if (ReturnBuffer.Length >= ReturnBuffer.MaximumLength) { PWSTR NewBuffer;
Modified: trunk/reactos/ntoskrnl/po/events.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/po/events.c?rev=62... ============================================================================== --- trunk/reactos/ntoskrnl/po/events.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/po/events.c [iso-8859-1] Sun Mar 23 17:33:01 2014 @@ -162,8 +162,6 @@ BOOLEAN Arrival; ULONG Caps; NTSTATUS Status; - UNICODE_STRING DeviceName; - UNICODE_STRING DeviceNamePrefix = RTL_CONSTANT_STRING(L"\??\");
DPRINT("PopAddRemoveSysCapsCallback(%p %p)\n", NotificationStructure, Context); @@ -184,20 +182,10 @@ { 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, - &DeviceName, + Notification->SymbolicLinkName, OBJ_KERNEL_HANDLE, NULL, NULL); @@ -208,7 +196,6 @@ &IoStatusBlock, FILE_SHARE_READ | FILE_SHARE_WRITE, 0); - RtlFreeUnicodeString(&DeviceName); if (!NT_SUCCESS(Status)) { DPRINT1("ZwOpenFile() failed with status 0x%08lx\n", Status);