Sync with trunk head (part 1 of x)
[reactos.git] / ntoskrnl / po / events.c
index 0cd9740..8417f27 100644 (file)
@@ -157,6 +157,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);
@@ -177,10 +179,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);