From ccd60957e30c57645b5e2d93c26e296fae5811e0 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Fri, 16 Jan 2009 06:33:19 +0000 Subject: [PATCH] - Implement SetSystemPowerState svn path=/trunk/; revision=38781 --- reactos/dll/win32/kernel32/misc/power.c | 42 +++++++++++++++++++------ 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/reactos/dll/win32/kernel32/misc/power.c b/reactos/dll/win32/kernel32/misc/power.c index be29e3bd8be..c02691597fb 100644 --- a/reactos/dll/win32/kernel32/misc/power.c +++ b/reactos/dll/win32/kernel32/misc/power.c @@ -15,9 +15,6 @@ #define NDEBUG #include -#define STUB \ - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \ - DPRINT1("%s() is UNIMPLEMENTED!\n", __FUNCTION__) NTSYSAPI NTSTATUS @@ -47,6 +44,16 @@ NtSetThreadExecutionState( OUT EXECUTION_STATE *PreviousFlags ); +NTSYSAPI +NTSTATUS +NTAPI +NtInitiatePowerAction( + IN POWER_ACTION SystemAction, + IN SYSTEM_POWER_STATE MinSystemState, + IN ULONG Flags, + IN BOOLEAN Asynchronous +); + /* PUBLIC FUNCTIONS ***********************************************************/ /* @@ -109,13 +116,27 @@ GetSystemPowerStatus(LPSYSTEM_POWER_STATUS PowerStatus) } /* - * @unimplemented + * @implemented */ BOOL WINAPI SetSystemPowerState(BOOL fSuspend, BOOL fForce) { - STUB; - return FALSE; + SYSTEM_POWER_STATE MinSystemState = (!fSuspend ? PowerSystemHibernate : PowerSystemSleeping1); + ULONG Flags = (!fForce ? POWER_ACTION_QUERY_ALLOWED : 0); + NTSTATUS Status; + + Status = NtInitiatePowerAction(PowerActionSleep, + MinSystemState, + Flags, + FALSE); + + if (!NT_SUCCESS(Status)) + { + SetLastErrorByStatus(Status); + return FALSE; + } + + return TRUE; } /* @@ -152,7 +173,8 @@ BOOL WINAPI RequestDeviceWakeup(HANDLE hDevice) { - STUB; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + DPRINT1("RequestDeviceWakeup is UNIMPLEMENTED!\n"); return 0; } @@ -183,7 +205,8 @@ BOOL WINAPI CancelDeviceWakeupRequest(HANDLE hDevice) { - STUB; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + DPRINT1("CancelDeviceWakeupRequest is UNIMPLEMENTED!\n"); return 0; } @@ -205,7 +228,8 @@ WINAPI SetMessageWaitingIndicator(HANDLE hMsgIndicator, ULONG ulMsgCount) { - STUB; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + DPRINT1("SetMessageWaitingIndicator is UNIMPLEMENTED!\n"); return 0; } -- 2.17.1