home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winbase / security / winnt / gina / shutdown.c < prev    next >
C/C++ Source or Header  |  1997-10-09  |  5KB  |  211 lines

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright 1992 - 1997 Microsoft Corporation.
  5. //
  6. //  File:       shutdown.c
  7. //
  8. //  Contents:
  9. //
  10. //  Classes:
  11. //
  12. //  Functions:
  13. //
  14. //  History:    4-28-95   RichardW   Created
  15. //
  16. //----------------------------------------------------------------------------
  17.  
  18. #include "gina.h"
  19. #pragma hdrstop
  20.  
  21. WCHAR   szShutdownSettingPath[] = TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Shutdown");
  22. int
  23. ShutdownDialogInit(
  24.     HWND        hDlg,
  25.     LPARAM      lParam)
  26. {
  27.     PGlobals    pGlobals;
  28.     HKEY        hKey;
  29.     DWORD       dwValue;
  30.     DWORD       dwSize;
  31.     DWORD       dwType;
  32.     DWORD       PowerOff;
  33.  
  34.     pGlobals = (PGlobals) lParam;
  35.  
  36.     SetWindowLong(hDlg, GWL_USERDATA, lParam);
  37.  
  38.     PowerOff = GetProfileInt(TEXT("Winlogon"), TEXT("PowerDownAfterShutdown"), 0);
  39.  
  40.     if (pGlobals->hUserToken)
  41.     {
  42.         ImpersonateLoggedOnUser(pGlobals->hUserToken);
  43.     }
  44.  
  45.     dwValue = 0;
  46.  
  47.     if (!RegOpenKey(HKEY_CURRENT_USER,
  48.                     szShutdownSettingPath,
  49.                     &hKey))
  50.     {
  51.         dwSize = sizeof(DWORD);
  52.         RegQueryValueEx(hKey, TEXT("Shutdown Setting"), 0, &dwType, (PBYTE) &dwValue, &dwSize);
  53.         RegCloseKey(hKey);
  54.     }
  55.  
  56.     if (pGlobals->hUserToken)
  57.     {
  58.         RevertToSelf();
  59.     }
  60.  
  61.     if (!PowerOff)
  62.     {
  63.         ShowWindow(GetDlgItem(hDlg, IDD_CONFIRM_POWEROFF), SW_HIDE);
  64.     }
  65.  
  66.     if (!pGlobals->hUserToken)
  67.     {
  68.         ShowWindow(GetDlgItem(hDlg, IDD_CONFIRM_LOGOFF), SW_HIDE);
  69.     }
  70.  
  71.     switch (dwValue)
  72.     {
  73.         case 0:
  74.             if (pGlobals->hUserToken)
  75.             {
  76.                 CheckDlgButton(hDlg, IDD_CONFIRM_LOGOFF, 1);
  77.                 SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_LOGOFF));
  78.                 break;
  79.             }
  80.  
  81.         case 2:
  82.             CheckDlgButton(hDlg, IDD_CONFIRM_REBOOT, 1);
  83.                 SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_REBOOT));
  84.             break;
  85.         case 3:
  86.             if (PowerOff)
  87.             {
  88.                 CheckDlgButton(hDlg, IDD_CONFIRM_POWEROFF, 1);
  89.                 SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_POWEROFF));
  90.                 break;
  91.             }
  92.         default:
  93.             CheckDlgButton(hDlg, IDD_CONFIRM_SHUTDOWN, 1);
  94.             SetFocus(GetDlgItem(hDlg, IDD_CONFIRM_SHUTDOWN));
  95.  
  96.     }
  97.  
  98.     CenterWindow(hDlg);
  99.  
  100.     SetFocus(GetDlgItem(hDlg, IDOK));
  101.  
  102.     return(1);
  103.  
  104. }
  105.  
  106. VOID
  107. UpdateShutdownSettings(
  108.             PGlobals    pGlobals,
  109.             DWORD       Setting)
  110. {
  111.     // int err;
  112.     HKEY    hKey;
  113.     DWORD   Actual;
  114.  
  115.     switch (Setting)
  116.     {
  117.         default:
  118.         case IDD_CONFIRM_LOGOFF:
  119.             Actual = 0;
  120.             break;
  121.  
  122.         case IDD_CONFIRM_SHUTDOWN:
  123.             Actual = 1;
  124.             break;
  125.  
  126.         case IDD_CONFIRM_REBOOT:
  127.             Actual = 2;
  128.             break;
  129.  
  130.         case IDD_CONFIRM_POWEROFF:
  131.             Actual = 3;
  132.             break;
  133.     }
  134.  
  135.  
  136.     if (pGlobals->hUserToken)
  137.     {
  138.         ImpersonateLoggedOnUser(pGlobals->hUserToken);
  139.     }
  140.  
  141.     if (!RegOpenKey(HKEY_CURRENT_USER,
  142.                     szShutdownSettingPath,
  143.                     &hKey))
  144.     {
  145.         RegSetValueEx(  hKey,
  146.                         TEXT("Shutdown Setting"),
  147.                         0,
  148.                         REG_DWORD,
  149.                         (PBYTE) &Actual,
  150.                         sizeof(DWORD) );
  151.         RegCloseKey(hKey);
  152.     }
  153.  
  154.     if (pGlobals->hUserToken)
  155.     {
  156.         RevertToSelf();
  157.     }
  158.  
  159. }
  160.  
  161. int
  162. CALLBACK
  163. ShutdownDlgProc(
  164.     HWND        hDlg,
  165.     UINT        Message,
  166.     WPARAM      wParam,
  167.     LPARAM      lParam)
  168. {
  169.     PGlobals    pGlobals;
  170.  
  171.     switch (Message)
  172.     {
  173.         case WM_INITDIALOG:
  174.             return(ShutdownDialogInit(hDlg, lParam));
  175.  
  176.         case WM_COMMAND:
  177.             if (LOWORD(wParam) == IDCANCEL)
  178.             {
  179.                 EndDialog(hDlg, WLX_SAS_ACTION_NONE);
  180.             }
  181.             if (LOWORD(wParam) == IDOK)
  182.             {
  183.                 pGlobals = (PGlobals) GetWindowLong(hDlg, GWL_USERDATA);
  184.  
  185.                 if (IsDlgButtonChecked(hDlg, IDD_CONFIRM_LOGOFF))
  186.                 {
  187.                     UpdateShutdownSettings(pGlobals, IDD_CONFIRM_LOGOFF);
  188.                     EndDialog(hDlg, WLX_SAS_ACTION_LOGOFF);
  189.                 }
  190.                 else if (IsDlgButtonChecked(hDlg, IDD_CONFIRM_REBOOT))
  191.                 {
  192.                     UpdateShutdownSettings(pGlobals, IDD_CONFIRM_REBOOT);
  193.                     EndDialog(hDlg, WLX_SAS_ACTION_SHUTDOWN_REBOOT);
  194.                 }
  195.                 else if (IsDlgButtonChecked(hDlg, IDD_CONFIRM_POWEROFF))
  196.                 {
  197.                     UpdateShutdownSettings(pGlobals, IDD_CONFIRM_POWEROFF);
  198.                     EndDialog(hDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
  199.                 }
  200.                 else
  201.                 {
  202.                     UpdateShutdownSettings(pGlobals, IDD_CONFIRM_SHUTDOWN);
  203.                     EndDialog(hDlg, WLX_SAS_ACTION_SHUTDOWN);
  204.                 }
  205.  
  206.             }
  207.             return(TRUE);
  208.     }
  209.     return(FALSE);
  210. }
  211.