2 * PROJECT: ReactOS Power Configuration Applet
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/powercfg/hibernate.c
5 * PURPOSE: hibernate tab of applet
6 * PROGRAMMERS: Alexander Wurzinger (Lohnegrim at gmx dot net)
7 * Johannes Anderwald (johannes.anderwald@reactos.org)
9 * Dmitry Chapyshev (lentind@yandex.ru)
15 Hib_InitDialog(HWND hwndDlg
)
17 SYSTEM_POWER_CAPABILITIES PowerCaps
;
19 TCHAR szTemp
[MAX_PATH
];
21 ULARGE_INTEGER FreeBytesAvailable
, TotalNumberOfBytes
, TotalNumberOfFreeBytes
;
23 if (GetPwrCapabilities(&PowerCaps
))
25 CheckDlgButton(hwndDlg
,
27 PowerCaps
.HiberFilePresent
? BST_CHECKED
: BST_UNCHECKED
);
29 msex
.dwLength
= sizeof(msex
);
30 if (!GlobalMemoryStatusEx(&msex
))
35 if (GetWindowsDirectory(szTemp
,MAX_PATH
))
40 // Get available space and size of selected volume.
41 if (!GetDiskFreeSpaceEx(lpRoot
, &FreeBytesAvailable
, &TotalNumberOfBytes
, &TotalNumberOfFreeBytes
))
42 TotalNumberOfFreeBytes
.QuadPart
= 0;
44 // Print the free available space into selected volume.
45 StrFormatByteSize(TotalNumberOfFreeBytes
.QuadPart
, szTemp
, _countof(szTemp
));
46 SetDlgItemText(hwndDlg
, IDC_FREESPACE
, szTemp
);
48 // Print the amount of space required for hibernation.
49 StrFormatByteSize(msex
.ullTotalPhys
, szTemp
, _countof(szTemp
));
50 SetDlgItemText(hwndDlg
, IDC_SPACEFORHIBERNATEFILE
, szTemp
);
52 if (TotalNumberOfFreeBytes
.QuadPart
< msex
.ullTotalPhys
&& !PowerCaps
.HiberFilePresent
)
54 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), FALSE
);
55 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), TRUE
);
59 ShowWindow(GetDlgItem(hwndDlg
, IDC_TOLESSFREESPACE
), FALSE
);
60 EnableWindow(GetDlgItem(hwndDlg
, IDC_HIBERNATEFILE
), TRUE
);
66 Hib_SaveData(HWND hwndDlg
)
70 bHibernate
= (BOOLEAN
)(IsDlgButtonChecked(hwndDlg
, IDC_HIBERNATEFILE
) == BST_CHECKED
);
72 if (CallNtPowerInformation(SystemReserveHiberFile
, &bHibernate
, sizeof(bHibernate
), NULL
, 0) == STATUS_SUCCESS
)
74 Hib_InitDialog(hwndDlg
);
81 /* Property page dialog callback */
83 HibernateDlgProc(HWND hwndDlg
,
91 Hib_InitDialog(hwndDlg
);
95 switch (LOWORD(wParam
))
97 case IDC_HIBERNATEFILE
:
98 if (HIWORD(wParam
) == BN_CLICKED
)
100 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
107 if (((LPNMHDR
)lParam
)->code
== (UINT
)PSN_APPLY
)
109 return Hib_SaveData(hwndDlg
);