[PATCH] powrprof.dll stub

Michal Příhoda <[email protected]> Sat, 12 Nov 2005 20:22:04 +0100
Newsgroups gmane.comp.emulators.winex.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------030107060601040808070605
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

included here is stubbed-out powrprof.dll, needed for example to launch 
Planetside in cedega. I just took a patch created by Benjamin Cutler and 
adapted it to current winex HEAD. (He presented the original patch on TG 
users forum). It would be really nice to have it included in cedega, a 
lot of effect for no work at all :-P

Thanks in advance.
--
Michal Prihoda

--------------030107060601040808070605
Content-Type: text/x-patch;
 name="powrprof.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="powrprof.diff"

diff -uNr winex/configure.ac winex.new/configure.ac
--- winex/configure.ac	2005-08-25 22:35:21.000000000 +0200
+++ winex.new/configure.ac	2005-11-12 11:58:47.000000000 +0100
@@ -1855,6 +1855,7 @@
 dlls/olepro32/Makefile
 dlls/olesvr/Makefile
 dlls/opengl32/Makefile
+dlls/powrprof/Makefile
 dlls/psapi/Makefile
 dlls/qcap/Makefile
 dlls/quartz/Makefile
diff -uNr winex/dlls/Makefile.in winex.new/dlls/Makefile.in
--- winex/dlls/Makefile.in	2005-08-25 22:34:44.000000000 +0200
+++ winex.new/dlls/Makefile.in	2005-11-12 11:53:01.000000000 +0100
@@ -79,6 +79,7 @@
 	olepro32 \
 	olesvr \
 	psapi \
+	powrprof \
 	qcap \
 	quartz \
 	rasapi32 \
@@ -221,6 +222,7 @@
 	libolesvr.$(LIBEXT) \
 	libolesvr32.$(LIBEXT) \
 	libpsapi.$(LIBEXT) \
+	libpowrprof.$(LIBEXT) \
 	libqcap.$(LIBEXT) \
 	libquartz.$(LIBEXT) \
 	librasapi16.$(LIBEXT) \
@@ -503,6 +505,9 @@
 libpsapi.$(LIBEXT): psapi/libpsapi.$(LIBEXT)
 	$(RM) $@ && $(LN_S) psapi/libpsapi.$(LIBEXT) $@
 
+libpowrprof.$(LIBEXT): powrprof/libpowrprof.$(LIBEXT)
+	$(RM) $@ && $(LN_S) powrprof/libpowrprof.$(LIBEXT) $@
+
 libqcap.$(LIBEXT): qcap/libqcap.$(LIBEXT)
 	$(RM) $@ && $(LN_S) qcap/libqcap.$(LIBEXT) $@
 
@@ -857,6 +862,9 @@
 psapi/libpsapi.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
 	@cd psapi && $(MAKE) libpsapi.$(LIBEXT)
 
+powrprof/libpowrprof.$(LIBEXT): dummy libkernel32.$(LIBEXT) libntdll.$(LIBEXT)
+	@cd powrprof && $(MAKE) libpowrprof.$(LIBEXT)
+
 qcap/libqcap.$(LIBEXT): dummy libntdll.$(LIBEXT)
 	@cd qcap && $(MAKE) libqcap.$(LIBEXT)
 
diff -uNr winex/dlls/powrprof/Makefile.in winex.new/dlls/powrprof/Makefile.in
--- winex/dlls/powrprof/Makefile.in	1970-01-01 01:00:00.000000000 +0100
+++ winex.new/dlls/powrprof/Makefile.in	2005-11-12 12:08:33.000000000 +0100
@@ -0,0 +1,14 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = powrprof
+
+LDDLLFLAGS = @LDDLLFLAGS@
+SYMBOLFILE = $(MODULE).tmp.o
+
+C_SRCS = powrprof.c
+
+@MAKE_DLL_RULES@
+
+### Dependencies:
diff -uNr winex/dlls/powrprof/powrprof.c winex.new/dlls/powrprof/powrprof.c
--- winex/dlls/powrprof/powrprof.c	1970-01-01 01:00:00.000000000 +0100
+++ winex.new/dlls/powrprof/powrprof.c	2005-11-12 17:39:13.000000000 +0100
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2005 Benjamin Cutler
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnt.h"
+#include "winreg.h"
+#include "winternl.h"
+#include "winnt.h"
+#include "powrprof.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(powrprof);
+
+NTSTATUS WINAPI CallNtPowerInformation(
+			POWER_INFORMATION_LEVEL InformationLevel, 
+			PVOID lpInputBuffer, ULONG nInputBufferSize, 
+			PVOID lpOutputBuffer, ULONG nOutputBufferSize) 
+{
+	FIXME("(%d, %p, %d, %p, %d) stub!\n", InformationLevel, lpInputBuffer, nInputBufferSize, lpOutputBuffer, nOutputBufferSize);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return STATUS_ACCESS_DENIED;
+}
+
+BOOLEAN WINAPI CanUserWritePwrScheme(VOID)
+{
+	FIXME("stub!\n");
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI DeletePwrScheme(UINT uiIndex)
+{
+	FIXME("(%d) stub!\n", uiIndex);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC lpfnPwrSchemesEnumProc, 
+			LPARAM lParam)
+{
+	FIXME("(%p, %d) stub!\n", lpfnPwrSchemesEnumProc, lParam);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI GetActivePwrScheme(PUINT puiID)
+{
+	FIXME("(%p) stub!\n", puiID);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI GetCurrentPowerPolicies(
+			PGLOBAL_POWER_POLICY pGlobalPowerPolicy, 
+			PPOWER_POLICY pPowerPolicy)
+{
+	FIXME("(%p, %p) stub!\n", pGlobalPowerPolicy, pPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI GetPwrCapabilities(
+			PSYSTEM_POWER_CAPABILITIES lpSystemPowerCapabilities)
+{
+	FIXME("(%p) stub!\n", lpSystemPowerCapabilities);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT RangeMax, PUINT RangeMin)
+{
+	FIXME("(%p, %p) stub!\n", RangeMax, RangeMin);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI IsPwrHibernateAllowed(VOID)
+{
+	FIXME("stub!\n");
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI IsPwrShutdownAllowed(VOID)
+{
+	FIXME("stub!\n");
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI IsPwrSuspendAllowed(VOID)
+{
+	FIXME("stub!\n");
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY pGlobalPowerPolicy)
+{
+	FIXME("(%p) stub!\n", pGlobalPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI ReadProcessorPwrScheme(UINT uiID, 
+			PMACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy)
+{
+	FIXME("(%d, %p) stub!\n", uiID, pMachineProcessorPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI ReadPwrScheme(UINT uiID,
+			PPOWER_POLICY pPowerPolicy)
+{
+	FIXME("(%d, %p) stub!\n", uiID, pPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI SetActivePwrScheme(UINT uiID, 
+			PGLOBAL_POWER_POLICY lpGlobalPowerPolicy, 
+			PPOWER_POLICY lpPowerPolicy)
+{
+	FIXME("(%d, %p, %p) stub!\n", uiID, lpGlobalPowerPolicy, lpPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI SetSuspendState(BOOLEAN Hibernate, BOOLEAN ForceCritical, 
+			BOOLEAN DisableWakeEvent)
+{
+	FIXME("(%d, %d, %d) stub!\n", Hibernate, ForceCritical, DisableWakeEvent);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY pGlobalPowerPolicy)
+{
+	FIXME("(%p) stub!\n", pGlobalPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI WriteProcessorPwrScheme(UINT ID, 
+			PMACHINE_PROCESSOR_POWER_POLICY pMachineProcessorPowerPolicy)
+{
+	FIXME("(%d, %p) stub!\n", ID, pMachineProcessorPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
+
+BOOLEAN WINAPI WritePwrScheme(PUINT puiID, LPWSTR lpszName, LPWSTR lpszDescription, 
+			PPOWER_POLICY pPowerPolicy)
+{
+	FIXME("(%d, %s, %s, %p) stub!\n", puiID, lpszName, lpszDescription, pPowerPolicy);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return 0;
+}
diff -uNr winex/dlls/powrprof/powrprof.spec winex.new/dlls/powrprof/powrprof.spec
--- winex/dlls/powrprof/powrprof.spec	1970-01-01 01:00:00.000000000 +0100
+++ winex.new/dlls/powrprof/powrprof.spec	2005-11-12 12:05:38.000000000 +0100
@@ -0,0 +1,27 @@
+name powrprof
+type win32
+
+import kernel32.dll
+import ntdll.dll
+
+debug_channels (powrprof)
+
+@ stdcall CallNtPowerInformation (long ptr long ptr long) CallNtPowerInformation
+@ stdcall CanUserWritePwrScheme () CanUserWritePwrScheme 
+@ stdcall DeletePwrScheme (long) DeletePwrScheme
+@ stdcall EnumPwrSchemes (ptr long) EnumPwrSchemes
+@ stdcall GetActivePwrScheme (ptr) GetActivePwrScheme
+@ stdcall GetCurrentPowerPolicies (ptr ptr) GetCurrentPowerPolicies
+@ stdcall GetPwrCapabilities (ptr) GetPwrCapabilities
+@ stdcall GetPwrDiskSpindownRange (ptr ptr) GetPwrDiskSpindownRange
+@ stdcall IsPwrHibernateAllowed () IsPwrHibernateAllowed
+@ stdcall IsPwrShutdownAllowed () IsPwrShutdownAllowed
+@ stdcall IsPwrSuspendAllowed () IsPwrSuspendAllowed
+@ stdcall ReadGlobalPwrPolicy (ptr) ReadGlobalPwrPolicy
+@ stdcall ReadProcessorPwrScheme (long ptr) ReadProcessorPwrScheme
+@ stdcall ReadPwrScheme (long ptr) ReadPwrScheme
+@ stdcall SetActivePwrScheme (long ptr ptr) SetActivePwrScheme
+@ stdcall SetSuspendState (long long long) SetSuspendState
+@ stdcall WriteGlobalPwrPolicy (ptr) WriteGlobalPwrPolicy
+@ stdcall WriteProcessorPwrScheme (long ptr) WriteProcessorPwrScheme
+@ stdcall WritePwrScheme (ptr str str ptr) WritePwrScheme
diff -uNr winex/include/powrprof.h winex.new/include/powrprof.h
--- winex/include/powrprof.h	1970-01-01 01:00:00.000000000 +0100
+++ winex.new/include/powrprof.h	2005-11-12 17:01:56.000000000 +0100
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2005 Benjamin Cutler
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef __WINE_POWRPROF_H
+#define __WINE_POWRPROF_H 1
+
+#define EnableSysTrayBatteryMeter	0x01
+#define EnableMultiBatteryDisplay	0x02
+#define EnablePasswordLogon		0x04
+#define EnableWakeOnRing		0x08
+#define EnableVideoDimDisplay		0x10
+
+typedef struct _GLOBAL_MACHINE_POWER_POLICY {
+	ULONG Revision;
+	SYSTEM_POWER_STATE LidOpenWakeAc;
+	SYSTEM_POWER_STATE LidOpenWakeDc;
+	ULONG BroadcastCapacityResolution;
+} GLOBAL_MACHINE_POWER_POLICY, 
+*PGLOBAL_MACHINE_POWER_POLICY;
+
+typedef struct _GLOBAL_USER_POWER_POLICY {
+	ULONG Revision;
+	POWER_ACTION_POLICY PowerButtonAc;
+	POWER_ACTION_POLICY PowerButtonDc;
+	POWER_ACTION_POLICY SleepButtonAc;
+	POWER_ACTION_POLICY SleepButtonDc;
+	POWER_ACTION_POLICY LidCloseAc;
+	POWER_ACTION_POLICY LidCloseDc;
+	SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+	ULONG GlobalFlags;
+} GLOBAL_USER_POWER_POLICY, 
+*PGLOBAL_USER_POWER_POLICY;
+
+typedef struct _GLOBAL_POWER_POLICY {
+	GLOBAL_USER_POWER_POLICY user;
+	GLOBAL_MACHINE_POWER_POLICY mach;
+} GLOBAL_POWER_POLICY, 
+*PGLOBAL_POWER_POLICY;
+
+typedef struct _MACHINE_POWER_POLICY {
+	ULONG Revision;
+	SYSTEM_POWER_STATE MinSleepAc;
+	SYSTEM_POWER_STATE MinSleepDc;
+	SYSTEM_POWER_STATE ReducedLatencySleepAc;
+	SYSTEM_POWER_STATE ReducedLatencySleepDc;
+	ULONG DozeTimeoutAc;
+	ULONG DozeTimeoutDc;
+	ULONG DozeS4TimeoutAc;
+	ULONG DozeS4TimeoutDc;
+	UCHAR MinThrottleAc;
+	UCHAR MinThrottleDc;
+	UCHAR pad1[2];
+	POWER_ACTION_POLICY OverThrottledAc;
+	POWER_ACTION_POLICY OverThrottledDc;
+} MACHINE_POWER_POLICY, 
+*PMACHINE_POWER_POLICY;
+
+typedef struct _MACHINE_PROCESSOR_POWER_POLICY {
+	ULONG Revision;
+	PROCESSOR_POWER_POLICY ProcessorPolicyAc;
+	PROCESSOR_POWER_POLICY ProcessorPolicyDc;
+} MACHINE_PROCESSOR_POWER_POLICY, 
+*PMACHINE_PROCESSOR_POWER_POLICY;
+
+typedef struct _USER_POWER_POLICY {
+	ULONG Revision;
+	POWER_ACTION_POLICY IdleAc;
+	POWER_ACTION_POLICY IdleDc;
+	ULONG IdleTimeoutAc;
+	ULONG IdleTimeoutDc;
+	UCHAR IdleSensitivityAc;
+	UCHAR IdleSensitivityDc;
+	UCHAR ThrottlePolicyAc;
+	UCHAR ThrottlePolicyDc;
+	SYSTEM_POWER_STATE MaxSleepAc;
+	SYSTEM_POWER_STATE MaxSleepDc;
+	ULONG Reserved[2];
+	ULONG VideoTimeoutAc;
+	ULONG VideoTimeoutDc;
+	ULONG SpindownTimeoutAc;
+	ULONG SpindownTimeoutDc;
+	BOOLEAN OptimizeForPowerAc;
+	BOOLEAN OptimizeForPowerDc;
+	UCHAR FanThrottleToleranceAc;
+	UCHAR FanThrottleToleranceDc;
+	UCHAR ForcedThrottleAc;
+	UCHAR ForcedThrottleDc;
+} USER_POWER_POLICY, 
+*PUSER_POWER_POLICY;
+
+typedef struct _POWER_POLICY {
+	USER_POWER_POLICY user;
+	MACHINE_POWER_POLICY mach;
+} POWER_POLICY, 
+*PPOWER_POLICY;
+
+typedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPWSTR, DWORD, LPWSTR, PPOWER_POLICY, LPARAM);
+
+NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG);
+BOOLEAN WINAPI CanUserWritePwrScheme(VOID);
+BOOLEAN WINAPI DeletePwrScheme(UINT);
+BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);
+BOOLEAN WINAPI GetActivePwrScheme(PUINT);
+BOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
+BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT, PUINT);
+BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
+BOOLEAN WINAPI IsPwrHibernateAllowed(VOID);
+BOOLEAN WINAPI IsPwrShutdownAllowed(VOID);
+BOOLEAN WINAPI IsPwrSuspendAllowed(VOID);
+BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY);
+BOOLEAN WINAPI SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);
+BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI WritePwrScheme(PUINT, LPWSTR, LPWSTR, PPOWER_POLICY);
+
+#endif /* _POWRPROF_H */
diff -uNr winex/include/winnt.h winex.new/include/winnt.h
--- winex/include/winnt.h	2005-08-25 21:44:39.000000000 +0200
+++ winex.new/include/winnt.h	2005-11-12 17:01:56.000000000 +0100
@@ -3902,6 +3902,217 @@
 #define REG_FULL_RESOURCE_DESCRIPTOR	9	/* full resource descriptor? huh? */
 #define REG_RESOURCE_REQUIREMENTS_LIST	10
 
+#define DISCHARGE_POLICY_CRITICAL 	0
+#define DISCHARGE_POLICY_LOW		1
+#define NUM_DISCHARGE_POLICIES		4
+
+#define PO_THROTTLE_NONE		0
+#define PO_THROTTLE_CONSTANT		1
+#define PO_THROTTLE_DEGRADE		2
+#define PO_THROTTLE_ADAPTIVE		3
+
+typedef enum _POWER_ACTION {
+	PowerActionNone = 0,
+	PowerActionReserved,
+	PowerActionSleep,
+	PowerActionHibernate,
+	PowerActionShutdown,
+	PowerActionShutdownReset,
+	PowerActionShutdownOff,
+	PowerActionWarmEject
+} POWER_ACTION,
+*PPOWER_ACTION;
+
+typedef enum _SYSTEM_POWER_STATE {
+	PowerSystemUnspecified = 0,
+	PowerSystemWorking = 1,
+	PowerSystemSleeping1 = 2,
+	PowerSystemSleeping2 = 3,
+	PowerSystemSleeping3 = 4,
+	PowerSystemHibernate = 5,
+	PowerSystemShutdown = 6,
+	PowerSystemMaximum = 7
+} SYSTEM_POWER_STATE,
+*PSYSTEM_POWER_STATE;
+
+typedef enum _POWER_INFORMATION_LEVEL {
+        SystemPowerPolicyAc,
+        SystemPowerPolicyDc,
+        VerifySystemPolicyAc,
+        VerifySystemPolicyDc,
+        SystemPowerCapabilities,
+        SystemBatteryState,
+        SystemPowerStateHandler,
+        ProcessorStateHandler,
+        SystemPowerPolicyCurrent,
+        AdministratorPowerPolicy,
+        SystemReserveHiberFile,
+        ProcessorInformation,
+        SystemPowerInformation,
+        ProcessorStateHandler2,
+        LastWakeTime,
+        LastSleepTime,
+        SystemExecutionState,
+        SystemPowerStateNotifyHandler,
+        ProcessorPowerPolicyAc,
+        ProcessorPowerPolicyDc,
+        VerifyProcessorPowerPolicyAc,
+        VerifyProcessorPowerPolicyDc,
+        ProcessorPowerPolicyCurrent
+} POWER_INFORMATION_LEVEL;
+
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+	SYSTEM_POWER_STATE MinSleep;
+	SYSTEM_POWER_STATE MaxSleep;
+	ULONG MinVideoTimeout;
+	ULONG MaxVideoTimeout;
+	ULONG MinSpindownTimeout;
+	ULONG MaxSpindownTimeout;
+} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
+
+typedef struct {
+	ULONG Granularity;
+	ULONG Capacity;
+} BATTERY_REPORTING_SCALE, 
+*PBATTERY_REPORTING_SCALE;
+
+typedef struct {
+	POWER_ACTION Action;
+	ULONG Flags;
+	ULONG EventCode;
+} POWER_ACTION_POLICY, 
+*PPOWER_ACTION_POLICY;
+
+typedef struct _PROCESSOR_POWER_INFORMATION {
+	ULONG Number;
+	ULONG MaxMhz;
+	ULONG CurrentMhz;
+	ULONG MhzLimit;
+	ULONG MaxIdleState;
+	ULONG CurrentIdleState;
+} PROCESSOR_POWER_INFORMATION, 
+*PPROCESSOR_POWER_INFORMATION;
+
+typedef struct _PROCESSOR_POWER_POLICY_INFO {
+	ULONG TimeCheck;
+	ULONG DemoteLimit;
+	ULONG PromoteLimit;
+	UCHAR DemotePercent;
+	UCHAR PromotePercent;
+	UCHAR Spare[2];
+	ULONG AllowDemotion:1;
+	ULONG AllowPromotion:1;
+	ULONG Reserved:30;
+} PROCESSOR_POWER_POLICY_INFO, 
+*PPROCESSOR_POWER_POLICY_INFO;
+
+typedef struct _PROCESSOR_POWER_POLICY {
+	DWORD Revision;
+	BYTE DynamicThrottle;
+	BYTE Spare[3];
+	DWORD DisableCStates:1;
+	DWORD Reserved:31;
+	DWORD PolicyCount;
+	PROCESSOR_POWER_POLICY_INFO Policy[3];
+} PROCESSOR_POWER_POLICY, 
+*PPROCESSOR_POWER_POLICY;
+
+typedef struct {
+	BOOLEAN AcOnLine;
+	BOOLEAN BatteryPresent;
+	BOOLEAN Charging;
+	BOOLEAN Discharging;
+	BOOLEAN Spare1[4];
+	ULONG MaxCapacity;
+	ULONG RemainingCapacity;
+	ULONG Rate;
+	ULONG EstimatedTime;
+	ULONG DefaultAlert1;
+	ULONG DefaultAlert2;
+} SYSTEM_BATTERY_STATE, 
+*PSYSTEM_BATTERY_STATE;
+
+typedef struct {
+  BOOLEAN PowerButtonPresent;
+  BOOLEAN SleepButtonPresent;
+  BOOLEAN LidPresent;
+  BOOLEAN SystemS1;
+  BOOLEAN SystemS2;
+  BOOLEAN SystemS3;
+  BOOLEAN SystemS4;
+  BOOLEAN SystemS5;
+  BOOLEAN HiberFilePresent;
+  BOOLEAN FullWake;
+  BOOLEAN VideoDimPresent;
+  BOOLEAN ApmPresent;
+  BOOLEAN UpsPresent;
+  BOOLEAN ThermalControl;
+  BOOLEAN ProcessorThrottle;
+  UCHAR ProcessorMinThrottle;
+  UCHAR ProcessorMaxThrottle;
+  UCHAR spare2[4];
+  BOOLEAN DiskSpinDown;
+  UCHAR spare3[8];
+  BOOLEAN SystemBatteriesPresent;
+  BOOLEAN BatteriesAreShortTerm;
+  BATTERY_REPORTING_SCALE BatteryScale[3];
+  SYSTEM_POWER_STATE AcOnLineWake;
+  SYSTEM_POWER_STATE SoftLidWake;
+  SYSTEM_POWER_STATE RtcWake;
+  SYSTEM_POWER_STATE MinDeviceWakeState;
+  SYSTEM_POWER_STATE DefaultLowLatencyWake;
+} SYSTEM_POWER_CAPABILITIES, 
+*PSYSTEM_POWER_CAPABILITIES;
+
+typedef struct _SYSTEM_POWER_INFORMATION {
+	ULONG MaxIdlenessAllowed;
+	ULONG Idleness;
+	ULONG TimeRemaining;
+	UCHAR CoolingMode;
+} SYSTEM_POWER_INFORMATION, 
+*PSYSTEM_POWER_INFORMATION;
+
+typedef struct _SYSTEM_POWER_LEVEL {
+	BOOLEAN Enable;
+	UCHAR Spare[3];
+	ULONG BatteryLevel;
+	POWER_ACTION_POLICY PowerPolicy;
+	SYSTEM_POWER_STATE MinSystemState;
+} SYSTEM_POWER_LEVEL, 
+*PSYSTEM_POWER_LEVEL;
+
+typedef struct _SYSTEM_POWER_POLICY {
+	ULONG Revision;
+	POWER_ACTION_POLICY PowerButton;
+	POWER_ACTION_POLICY SleepButton;
+	POWER_ACTION_POLICY LidClose;
+	SYSTEM_POWER_STATE LidOpenWake;
+	ULONG Reserved;
+	POWER_ACTION_POLICY Idle;
+	ULONG IdleTimeout;
+	UCHAR IdleSensitivity;
+	UCHAR DynamicThrottle;
+	UCHAR Spare2[2];
+	SYSTEM_POWER_STATE MinSleep;
+	SYSTEM_POWER_STATE MaxSleep;
+	SYSTEM_POWER_STATE ReducedLatencySleep;
+	ULONG WinLogonFlags;
+	ULONG Spare3;
+	ULONG DozeS4Timeout;
+	ULONG BroadcastCapacityResolution;
+	SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+	ULONG VideoTimeout;
+	BOOLEAN VideoDimDisplay;
+	ULONG VideoReserved[3];
+	ULONG SpindownTimeout;
+	BOOLEAN OptimizeForPower;
+	UCHAR FanThrottleTolerance;
+	UCHAR ForcedThrottle;
+	UCHAR MinThrottle;
+	POWER_ACTION_POLICY OverThrottled;
+} SYSTEM_POWER_POLICY, 
+*PSYSTEM_POWER_POLICY;
+
 /* ----------------------------- begin registry ----------------------------- */
 
 /* Registry security values */

--------------030107060601040808070605--