[NTOS:PO]

- Fix symbolic link name handling in PopAddRemoveSysCapsCallback. Fixes ACPI power button.
CORE-8017 #resolve

svn path=/trunk/; revision=62554
This commit is contained in:
Thomas Faber 2014-03-23 17:33:01 +00:00
parent a42481108c
commit 93e60bc731
2 changed files with 3 additions and 15 deletions

View file

@ -739,7 +739,7 @@ IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid,
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 @@ NextReferenceString:
}
/* Add final NULL to ReturnBuffer */
NT_ASSERT(ReturnBuffer.Length <= ReturnBuffer.MaximumLength);
if (ReturnBuffer.Length >= ReturnBuffer.MaximumLength)
{
PWSTR NewBuffer;

View file

@ -162,8 +162,6 @@ 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);
@ -184,20 +182,10 @@ 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,
&DeviceName,
Notification->SymbolicLinkName,
OBJ_KERNEL_HANDLE,
NULL,
NULL);
@ -208,7 +196,6 @@ 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);