ReactOS 0.4.16-dev-1781-g8fabb29
hibernate.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Power Configuration Applet
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Hibernate tab
5 * COPYRIGHT: Copyright 2006 Alexander Wurzinger <lohnegrim@gmx.net>
6 * Copyright 2006 Johannes Anderwald <johannes.anderwald@reactos.org>
7 * Copyright 2006 Martin Rottensteiner <2005only@pianonote.at>
8 */
9
10#include "powercfg.h"
11
12static VOID
14{
16 MEMORYSTATUSEX msex;
17 TCHAR szTemp[MAX_PATH];
18 LPTSTR lpRoot;
19 ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes;
20 BOOLEAN bHibernate;
21
22 if (GetPwrCapabilities(&PowerCaps))
23 {
24 CheckDlgButton(hwndDlg,
27
28 msex.dwLength = sizeof(msex);
29 if (!GlobalMemoryStatusEx(&msex))
30 {
31 return; // FIXME
32 }
33
34 if (GetWindowsDirectory(szTemp, _countof(szTemp)))
35 lpRoot = szTemp;
36 else
37 lpRoot = NULL;
38
39 // Get available space and size of selected volume.
40 if (!GetDiskFreeSpaceEx(lpRoot, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes))
41 TotalNumberOfFreeBytes.QuadPart = 0;
42
43 // Print the free available space into selected volume.
44 StrFormatByteSize(TotalNumberOfFreeBytes.QuadPart, szTemp, _countof(szTemp));
45 SetDlgItemText(hwndDlg, IDC_FREESPACE, szTemp);
46
47 // Print the amount of space required for hibernation.
48 StrFormatByteSize(msex.ullTotalPhys, szTemp, _countof(szTemp));
50
51 if (TotalNumberOfFreeBytes.QuadPart < msex.ullTotalPhys && !PowerCaps.HiberFilePresent)
52 {
55 }
56 else
57 {
60 }
61
62 bHibernate = !!PowerCaps.HiberFilePresent;
63 if (CallNtPowerInformation(SystemReserveHiberFile, &bHibernate, sizeof(bHibernate), NULL, 0) != STATUS_SUCCESS)
64 {
66 }
67 }
68}
69
72{
73 BOOLEAN bHibernate;
74
75 bHibernate = (IsDlgButtonChecked(hwndDlg, IDC_HIBERNATEFILE) == BST_CHECKED);
76 if (CallNtPowerInformation(SystemReserveHiberFile, &bHibernate, sizeof(bHibernate), NULL, 0) == STATUS_SUCCESS)
77 {
78 Hib_InitDialog(hwndDlg);
79 return TRUE;
80 }
81
82 return FALSE;
83}
84
85/* Property page dialog callback */
88 UINT uMsg,
91{
92 switch (uMsg)
93 {
94 case WM_INITDIALOG:
95 Hib_InitDialog(hwndDlg);
96 return TRUE;
97
98 case WM_COMMAND:
99 switch (LOWORD(wParam))
100 {
102 if (HIWORD(wParam) == BN_CLICKED)
103 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
104 break;
105 }
106 break;
107
108 case WM_NOTIFY:
109 if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
110 return Hib_SaveData(hwndDlg);
111 break;
112 }
113
114 return FALSE;
115}
unsigned char BOOLEAN
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDC_HIBERNATEFILE
Definition: resource.h:131
#define IDC_FREESPACE
Definition: resource.h:132
#define IDC_TOLESSFREESPACE
Definition: resource.h:134
#define IDC_SPACEFORHIBERNATEFILE
Definition: resource.h:133
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
BOOL NTAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer)
Definition: heapmem.c:1272
INT_PTR Hib_SaveData(HWND hwndDlg)
Definition: hibernate.c:71
static VOID Hib_InitDialog(HWND hwndDlg)
Definition: hibernate.c:13
INT_PTR CALLBACK HibernateDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: hibernate.c:87
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
unsigned int UINT
Definition: ndis.h:50
@ SystemReserveHiberFile
Definition: ntpoapi.h:77
#define LOWORD(l)
Definition: pedump.c:82
BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES lpSystemPowerCapabilities)
Definition: powrprof.c:582
NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL InformationLevel, PVOID lpInputBuffer, ULONG nInputBufferSize, PVOID lpOutputBuffer, ULONG nOutputBufferSize)
Definition: powrprof.c:283
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define PSN_APPLY
Definition: prsht.h:117
#define WM_NOTIFY
Definition: richedit.h:61
#define STATUS_SUCCESS
Definition: shellext.h:65
#define StrFormatByteSize
Definition: shlwapi.h:1629
#define _countof(array)
Definition: sndvol32.h:70
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
Definition: inflate.c:139
int32_t INT_PTR
Definition: typedefs.h:64
#define HIWORD(l)
Definition: typedefs.h:247
#define GetWindowsDirectory
Definition: winbase.h:3595
#define GetDiskFreeSpaceEx
Definition: winbase.h:3546
#define SW_HIDE
Definition: winuser.h:779
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
#define BST_UNCHECKED
Definition: winuser.h:199
#define WM_COMMAND
Definition: winuser.h:1768
#define WM_INITDIALOG
Definition: winuser.h:1767
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HWND WINAPI GetParent(_In_ HWND)
#define BN_CLICKED
Definition: winuser.h:1954
#define SW_SHOW
Definition: winuser.h:786
#define SetDlgItemText
Definition: winuser.h:5960
#define BST_CHECKED
Definition: winuser.h:197
char TCHAR
Definition: xmlstorage.h:189
CHAR * LPTSTR
Definition: xmlstorage.h:192