ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

hibernate.c
Go to the documentation of this file.
00001 /* $Id: hibernate.c 54535 2011-11-29 14:55:58Z dgorbachev $
00002  *
00003  * PROJECT:         ReactOS Power Configuration Applet
00004  * LICENSE:         GPL - See COPYING in the top level directory
00005  * FILE:            dll/cpl/powercfg/hibernate.c
00006  * PURPOSE:         hibernate tab of applet
00007  * PROGRAMMERS:     Alexander Wurzinger (Lohnegrim at gmx dot net)
00008  *                  Johannes Anderwald (johannes.anderwald@student.tugraz.at)
00009  *                  Martin Rottensteiner
00010  *                  Dmitry Chapyshev (lentind@yandex.ru)
00011  */
00012 
00013 //#ifndef NSTATUS
00014 //typedef long NTSTATUS;
00015 //#endif
00016 
00017 #include "powercfg.h"
00018 
00019 BOOLEAN Pos_InitData();
00020 void Adv_InitDialog();
00021 
00022 
00023 static VOID
00024 Hib_InitDialog(HWND hwndDlg)
00025 {
00026     SYSTEM_POWER_CAPABILITIES PowerCaps;
00027     MEMORYSTATUSEX msex;
00028     TCHAR szSize[MAX_PATH];
00029     TCHAR szTemp[MAX_PATH];
00030     ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes;
00031 
00032     if (GetPwrCapabilities(&PowerCaps))
00033     {
00034         CheckDlgButton(hwndDlg,
00035                    IDC_HIBERNATEFILE,
00036                    PowerCaps.HiberFilePresent ? BST_CHECKED : BST_UNCHECKED);
00037 
00038         msex.dwLength = sizeof(msex);
00039         if (!GlobalMemoryStatusEx(&msex))
00040         {
00041             return; // FIXME
00042         }
00043 
00044         if (GetWindowsDirectory(szTemp,MAX_PATH))
00045         {
00046             if (!GetDiskFreeSpaceEx(szTemp,&FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes))
00047                 TotalNumberOfFreeBytes.QuadPart = 0;
00048         }
00049         else
00050         {
00051             if (!GetDiskFreeSpaceEx(NULL,&FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes))
00052                 TotalNumberOfFreeBytes.QuadPart = 0;
00053         }
00054 
00055         if (TotalNumberOfFreeBytes.QuadPart > 0x100000)
00056         {
00057             if (LoadString(hApplet, IDS_SIZEMB, szTemp, MAX_PATH))
00058             {
00059                 _stprintf(szSize,szTemp,TotalNumberOfFreeBytes.QuadPart / 0x100000);
00060                 SetDlgItemText(hwndDlg, IDC_FREESPACE, szSize);
00061             }
00062         }
00063         else
00064         {
00065             if (LoadString(hApplet, IDS_SIZEBYTS, szTemp, MAX_PATH))
00066             {
00067                 _stprintf(szSize,szTemp,TotalNumberOfFreeBytes.QuadPart);
00068                 SetDlgItemText(hwndDlg, IDC_FREESPACE, szSize);
00069             }
00070         }
00071 
00072         if (msex.ullTotalPhys>0x100000)
00073         {
00074             if (LoadString(hApplet, IDS_SIZEMB, szTemp, MAX_PATH))
00075             {
00076                 _stprintf(szSize,szTemp,msex.ullTotalPhys/0x100000);
00077                 SetDlgItemText(hwndDlg, IDC_SPACEFORHIBERNATEFILE,szSize);
00078             }
00079         }
00080         else
00081         {
00082             if (LoadString(hApplet, IDS_SIZEBYTS, szTemp, MAX_PATH))
00083             {
00084                 _stprintf(szSize,szTemp,msex.ullTotalPhys);
00085                 SetDlgItemText(hwndDlg, IDC_SPACEFORHIBERNATEFILE, szSize);
00086             }
00087         }
00088 
00089         if (TotalNumberOfFreeBytes.QuadPart < msex.ullTotalPhys && !PowerCaps.HiberFilePresent)
00090         {
00091             EnableWindow(GetDlgItem(hwndDlg, IDC_HIBERNATEFILE), FALSE);
00092             ShowWindow(GetDlgItem(hwndDlg, IDC_TOLESSFREESPACE), TRUE);
00093         }
00094         else
00095         {
00096             ShowWindow(GetDlgItem(hwndDlg, IDC_TOLESSFREESPACE), FALSE);
00097             EnableWindow(GetDlgItem(hwndDlg, IDC_HIBERNATEFILE), TRUE);
00098         }
00099     }
00100 }
00101 
00102 INT_PTR
00103 Hib_SaveData(HWND hwndDlg)
00104 {
00105     BOOLEAN bHibernate;
00106 
00107     bHibernate = (BOOLEAN)(IsDlgButtonChecked(hwndDlg, IDC_HIBERNATEFILE) == BST_CHECKED);
00108 
00109     if (CallNtPowerInformation(SystemReserveHiberFile,&bHibernate, sizeof(bHibernate), NULL, 0) == STATUS_SUCCESS)
00110     {
00111         Pos_InitData();
00112         Adv_InitDialog();
00113         Hib_InitDialog(hwndDlg);
00114         return TRUE;
00115     }
00116 
00117     return FALSE;
00118 }
00119 
00120 /* Property page dialog callback */
00121 INT_PTR CALLBACK
00122 HibernateDlgProc(HWND hwndDlg,
00123                  UINT uMsg,
00124                  WPARAM wParam,
00125                  LPARAM lParam)
00126 {
00127   switch(uMsg)
00128   {
00129     case WM_INITDIALOG:
00130         Hib_InitDialog(hwndDlg);
00131         return TRUE;
00132     case WM_COMMAND:
00133         switch(LOWORD(wParam))
00134         {
00135         case IDC_HIBERNATEFILE:
00136             if (HIWORD(wParam) == BN_CLICKED)
00137             {
00138                 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00139             }
00140         }
00141         break;
00142     case WM_NOTIFY:
00143         {
00144             LPNMHDR lpnm = (LPNMHDR)lParam;
00145             if (lpnm->code == (UINT)PSN_APPLY)
00146             {
00147                 return Hib_SaveData(hwndDlg);
00148             }
00149         }
00150   }
00151   return FALSE;
00152 }

Generated on Fri May 25 2012 04:19:05 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.