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=6…
==============================================================================
--- 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);