/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
* FILE: ntoskrnl/po/events.c
* PURPOSE: Power Manager
- *
* PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.org)
*/
+/* INCLUDES ******************************************************************/
+
#include <ntoskrnl.h>
#define NDEBUG
-#include <internal/debug.h>
+#include <debug.h>
-PKWIN32_POWEREVENT_CALLOUT PopEventCallout;
-extern PCALLBACK_OBJECT SetSystemTimeCallback;
+/* GLOBALS *******************************************************************/
+
+typedef struct _SYS_BUTTON_CONTEXT
+{
+ PDEVICE_OBJECT DeviceObject;
+ PIO_WORKITEM WorkItem;
+ KEVENT Event;
+ IO_STATUS_BLOCK IoStatusBlock;
+ ULONG SysButton;
+} SYS_BUTTON_CONTEXT, *PSYS_BUTTON_CONTEXT;
static VOID
NTAPI
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context);
+PKWIN32_POWEREVENT_CALLOUT PopEventCallout;
+extern PCALLBACK_OBJECT SetSystemTimeCallback;
+
+/* FUNCTIONS *****************************************************************/
+
VOID
NTAPI
PoNotifySystemTimeSet(VOID)
}
}
-typedef struct _SYS_BUTTON_CONTEXT
-{
- PDEVICE_OBJECT DeviceObject;
- PIO_WORKITEM WorkItem;
- KEVENT Event;
- IO_STATUS_BLOCK IoStatusBlock;
- ULONG SysButton;
-} SYS_BUTTON_CONTEXT, *PSYS_BUTTON_CONTEXT;
-
static NTSTATUS
NTAPI
PopGetSysButtonCompletion(
NTSTATUS
NTAPI
-PopAddRemoveSysCapsCallback(
- IN PVOID NotificationStructure,
- IN PVOID Context)
+PopAddRemoveSysCapsCallback(IN PVOID NotificationStructure,
+ IN PVOID Context)
{
PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification;
PSYS_BUTTON_CONTEXT SysButtonContext;
BOOLEAN Arrival;
ULONG Caps;
NTSTATUS Status;
+ UNICODE_STRING DeviceName;
+ UNICODE_STRING DeviceNamePrefix = RTL_CONSTANT_STRING(L"\\??\\");
DPRINT("PopAddRemoveSysCapsCallback(%p %p)\n",
NotificationStructure, Context);
{
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);