ÀÚµ¿·Î±×ÀÎ
ÇöÀçÁ¢¼ÓÀÚ : 35 (ȸ¿ø 0)
¿À´Ã:175, ¾îÁ¦:733,
Àüü:740,463
 
ÇÁ·Î±×·¡¹Ö Q&A
ȸ¿øÁ¦°ø »ùÇüҽº
º£½ºÆ® Q&A
MFC/API °¡À̵å
¿ì¸®µé À̾߱â

Ȩ > Ä¿¹Â´ÏƼ > MFC/API °¡À̵å

  [Tip] ExitWindowsEx ¸¦ »ç¿ëÇÏ¿© ÄÄÇ»ÅÍ Á¾·áÇϱâ
  °ü¸®ÀÚ      Date : 08-07-13 02:13     Hit : 1673    
  Æ®·¢¹é ÁÖ¼Ò : http://www.tipssoft.com/bulletin/tb.php/FAQ/216
 
ÆÁ½º¼ÒÇÁÆ®¿¡¼­ Á¦°øÇÏ´Â ÇÁ·Î±×·¡¹Ö°ú °ü·ÃµÈ Àڷᳪ Á¤º¸µéÀ» ¹«´ÜÀ¸·Î º¹Á¦Çϰųª °ÔÀçÇÏ´Â ÇàÀ§´Â
»óÈ£°£ÀÇ ½Å·Ú¸¦ ¹«³Ê¶ß¸®´Â ÇàÀ§À̸ç, ¹ýÀûÀÎ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖÀ¸¹Ç·Î °¢º°ÇÑ ÁÖÀǸ¦ ´çºÎµå¸³´Ï´Ù.
* ÆÁ½º¼ÒÇÁÆ® ÀúÀÛ±Ç Á¤Ã¥ º¸±â -  http://www.tipssoft.com/bulletin/tb.php/FAQ/637
 
ÀÌ ÀÚ·áµéÀº ÆÁ½º¼ÒÇÁÆ®¿¡¼­ Á¦°øÇÏ´Â [ ¾ËÂ¥¹è±â ] ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¸é ´õ Æí¸®ÇÏ°Ô º¼¼ö ÀÖ½À´Ï´Ù.
* ¾ËÂ¥¹è±â ÇÁ·Î±×·¥ ¹Þ±â -  http://www.tipssoft.com/bulletin/tb.php/QnA/8406
 
 
ExitWindowsEx ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÄÄÇ»Å͸¦ Á¾·á, Àç½ÃÀÛ, ·Î±×¾Æ¿ô ½ÃŰ´Â ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù.
ÀÌ ÇÔ¼öÀÇ Ã¹¹øÂ° ÀÎÀÚ¿¡ ¾Æ·¡ ³ª¿­µÈ °ªÁß¿¡¼­ ¿øÇÏ´Â °ªÀ» Á¶ÇÕÇØ¼­ ¸í½Ã¸¸ ÇØÁÖ¸é µÇ±â ¶§¹®ÀÔ´Ï´Ù.
 
1. EWX_LOGOFF        : »ç¿ëÁßÀÎ ÇÁ·Î±×·¥À» Á¾·áÇÏ°í ½Ã½ºÅÛÀ» LOG OFF ½ÃŲ´Ù.
2. EWX_POWEROFF   : ½Ã½ºÅÛÀ» Á¾·áÇϰí Àü¿øÀ» ²÷´Ù.
3. EWX_REBOOT       : ½Ã½ºÅÛÀ» Á¾·á½ÃŲ ÈÄ ½Ã½ºÅÛÀ» Àç½ÃÀÛ ÇÑ´Ù.
4. EWX_SHUTDOWN   : »ç¿ëÀÚ°¡ ½Ã½ºÅÛÀÇ Àü¿øÀ» ²ø ¼ö ÀÖµµ·Ï ½Ã½ºÅÛÀ» Á¾·áÇÑ´Ù.
5. EWX_FORCE          : °­Á¦·Î ÇÁ·Î¼¼½º¸¦ Á¾·á½ÃŲ´Ù.
 
ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÒ¶§ ÁÖÀÇÇØ¾ßÇÒ Á¡Àº À©µµ¿ìÁî NT °è¿­(Windows NT, Windows 2000, Windows XP..)ÀÇ
¿î¿µÃ¼Á¦¿¡¼­´Â Á¾·á¸¦ À§Çؼ­ ExitWindowEx ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÇÁ·Î¼¼½º°¡ SE_SHUTDOWN_NAME
À̶ó´Â ±ÇÇÑÀ» °¡Áö°í ÀÖ¾î¾ß Çϱ⠶§¹®¿¡ ÇØ´ç ±ÇÇÑÀ» ¾ò´Â ±â´ÉÀ» Ãß°¡ÇØÁÖ¿©¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
( À©µµ¿ìÁî 98, Me¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼­´Â ±ÇÇÑÀÌ ÇÊ¿ä ¾ø½À´Ï´Ù. )
µû¶ó¼­ ExitWindowsEx ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ¸ÕÀú ¿î¿µÃ¼Á¦ÀÇ ¹öÀüÀ» üũÇÏ´Â Äڵ尡 ÀÖ¾î¾ß ÇÕ´Ï´Ù.
 
 
// ÇöÀç ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°í ÀÖ´Â À©µµ¿ìÁîÀÇ ¹öÀüÀ» ¹ÝȯÇϵµ·Ï ÀÛ¼ºµÈ ÇÔ¼öÀÔ´Ï´Ù.
// ------------------------------------------------------------------------------
// [ ¹Ýȯ°ª : ÀÇ¹Ì ]
//   -1 : ¹öÀü¾ò±â ½ÇÆÐ, 1 : Windows 95,  2 : Windows 98,  3 : Windows ME,  4 : Windows NT,
//    5 : Windows 2000,  6 : Windows XP

char GetOSVersionType()
{
    // °è»êµÈ À©µµ¿ìÁî ¹öÀüÀ» ÀúÀåÇÒ º¯¼ö
    char version = -1;
    // À©µµ¿ìÁî ¹öÀü¿¡ °ü·ÃµÈ Á¤º¸¸¦ ¾ò¾î¿Ã º¯¼ö
    OSVERSIONINFOEX osvi;
    // OSVERSIONINFOEX ±¸Á¶Ã¼ °ªÀ» ¾ò¾ú´ÂÁö OSVERSIONINFO ±¸Á¶Ã¼°ªÀ» ¾ò¾ú´ÂÁö¸¦
    // ±¸ºÐÇÒ º¯¼ö ( 0 À̸é, OSVERSIONINFO ±¸Á¶Ã¼ Á¤º¸¸¦ ¾ò¾ú´Ù´Â ¶æÀÔ´Ï´Ù. )
    BOOL version_ex_flag = 0;

    // ¿î¿µÃ¼Á¦ÀÇ ¹öÀü°ú °ü·ÃµÈ Á¤º¸¸¦ ¾ò±â À§ÇØ ±¸Á¶Ã¼ º¯¼ö¸¦ ÃʱâÈ­ÇÕ´Ï´Ù.
    ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    // ÇöÀ砿üÁ¦ÀÇ ¹öÀüÀ» ¾Ë¼ö ¾ø±â ¶§¹®¿¡ OSVERSIONINFOEX ¼Ó¼ºÀ¸·Î ¹öÀüÁ¤º¸¸¦ ¾ò½À´Ï´Ù.
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
 
    // GetVersionEx ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇöÀçÀÇ ¿î¿µÃ¼Á¦ Á¤º¸¸¦ ¾ò½À´Ï´Ù.
    // OSVERSIONINFOEX °ªÀ» ¼³Á¤Çϰí È£ÃâÇ߱⠴빮¿¡ À©µµ¿ì NT 4.0 SP6 ÀÌ»ó ¹× ±× ÀÌÈÄ ¹öÀüÀÇ
    //  À©µµ¿ì°¡ ¾Æ´Ï¶ó¸é ÀÌ ÇÔ¼ö´Â ½ÇÆÐÇÒ °ÍÀÔ´Ï´Ù.
    if(!(version_ex_flag = GetVersionEx((OSVERSIONINFO *)&osvi))){
        // À©µµ¿ìÁî ¹öÀüÀÌ ³·¾Æ¼­ OSVERSIONINFOEX Çü½ÄÀ¸·Î °ªÀ» ¾òÀ»¼ö ¾ø´Â °æ¿ì...
        // OSVERSIONINFO Çü½ÄÀ¸·Î Àç¼³Á¤ÇÏ°í °ªÀ» ¾ò½À´Ï´Ù.
        osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
        if(!GetVersionEx((OSVERSIONINFO *)&osvi)) return -1;
    }
 
    // ¾ò¾î¿Â OSVERSIONINFOEX ±¸Á¶Ã¼ º¯¼öÀÇ °ªÀ» ÀÌ¿ëÇÏ¿© ¹öÀüÀ» ±¸º°ÇÕ´Ï´Ù.
    switch(osvi.dwPlatformId){
        // NT ±â¼ú ±â¹ÝÀÇ ¿î¿µÃ¼Á¦ÀÎ °æ¿ì
        case VER_PLATFORM_WIN32_NT:
            if(osvi.dwMajorVersion <= 4) version = 4;
            else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) version = 5;
            else if(version_ex_flag) version = 6;
            break;

        // À©µµ¿ìÁî 9x ±â¹ÝÀÇ ¿î¿µÃ¼Á¦ÀÎ °æ¿ì
        case VER_PLATFORM_WIN32_WINDOWS:
            if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) version = 1;
            else if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) version = 2;
            else if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) version = 3;
            break;
    }
 
    return version;
}
 
// ÇöÀç ¿î¿µÃ¼Á¦°¡ NT °è¿­ÀÎ °æ¿ì, SE_SHUTDOWN_NAME ·¹º§ÀÇ ±ÇÇÑ µî±ÞÀ»
// °¡Áö°í ÀÖ¾î¾ß Çϱ⠶§¹®¿¡ ¾Æ·¡ÀÇ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ±ÇÇÑÀ» ¾ò½À´Ï´Ù.
char GetNtPrivilege()
{
    HANDLE h_token;
    TOKEN_PRIVILEGES privilege_info;
 
    // ÇöÀç ÇÁ·Î¼¼½ºÀÇ ±ÇÇѰú °ü·ÃµÈ Á¤º¸¸¦ º¯°æÇϱâ À§ÇØ ÅäÅ«Á¤º¸¸¦ ¿±´Ï´Ù.
    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
                                                    TOKEN_QUERY, &h_token)){
        // ±ÇÇѰú °ü·ÃµÈ Á¤º¸ Á¢±Ù¿¡ ½ÇÆÐÇÔ..
        return 0;
    }
 
    // ÇöÀç ÇÁ·Î¼¼½º°¡ SE_SHUTDOWN_NAME ±ÇÇÑÀ» »ç¿ëÇÒ¼ö ÀÖµµ·Ï ¼³Á¤ÇÑ´Ù.
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &privilege_info.Privileges[0].Luid);
    privilege_info.PrivilegeCount = 1;
    privilege_info.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 
    // ÁöÁ¤ÇÑ °ªÀ¸·Î ±ÇÇÑÀ» Á¶Á¤ÇÑ´Ù.
    AdjustTokenPrivileges(h_token, FALSE, &privilege_info, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    if(GetLastError() != ERROR_SUCCESS){
        // ±ÇÇÑ Á¶Á¤¿¡ ½ÇÆÐÇÑ °æ¿ì...
        return 0;
    }
 
    return 1;
}
 
// ÄÄÇ»Å͸¦ ²ø¶§ »ç¿ëÇÒ ÇÔ¼ö
void PowerOff()
{
    if(GetOSVersionType()) <= 3{
        // ÇöÀç ¿î¿µÃ¼Á¦°¡ Windows 95, Windows 98, Windows ME ÀÎ °æ¿ì...
        ExitWindowsEx(EWX_LOGOFF | EWX_POWEROFF | EWX_SHUTDOWN, 0);
        ExitWindowsEx(EWX_FORCE, 0);
    } else if(GetNtPrivilege()){
        // ÇöÀç ¿î¿µÃ¼Á¦°¡ Windows NT, Windows 2000, Windows XP ÀÎ °æ¿ì...
        ExitWindowsEx(EWX_FORCE | EWX_POWEROFF, 0);
    }
}
 

ÂüÁÁÀºÄ£±¸   08-08-21 17:28
À§Á¾·áÇÁ·Î±×·¥À» º£ÀÌÁ÷À¸·Î¸¸µé·Á¸é ¾î뗗°ÔÄÚµùÇØ¾ßµÇ´ÂÁö¿ä º£ÀÌÁ÷Ã¥¿¡µµ exitwindowsexÇÔ¼ö·Î Á¾·á½ÃŰ´Â³»¿ëÀº Àִµ¥ ÀüÇô¾ÈµÇ´õ±º¿ä  ¾Æ½Ã´ÂºÐÀº º£ÀÌÁ÷À¸·ÎÄÚµùÇØ¼­ ¸ÞÀϷκ¸³»Áֽøé 5¸¸¿øÀ» µå¸®°ÙÀ½´Ï´Ù xpÀ̰í¿ä exitpro ¿Í ¾Æ¸®¸¦ ¾²°íÀÖÀ¾´Ï´Ù Áï ÇÊ¿äÇѰÍÀºÁ¾·á½ÃŰ´Â¹æ¹ýÀÔ´Ï´Ù
°ü¸®ÀÚ   08-09-10 12:58
'ExitWindowsEx ¸¦ »ç¿ëÇÏ¿© ÄÄÇ»ÅÍ Á¾·áÇϱâ' ¿¹Á¦°¡ ÀÖ¾î ¾Ë·Áµå¸³´Ï´Ù.

http://www.tipssoft.com/source/s_sub/sub_1/source1_9.html
°ü¸®ÀÚ   09-02-16 14:24
À§ ¿¹Á¦Äڵ忡¼­ GetOSVersionType() ÇÔ¼ö°¡ ºñ½ºÅ¸ ¿î¿µÃ¼Á¦´Â üũÇÏÁö ¸øÇÕ´Ï´Ù. µû¶ó¼­
ºñ½ºÅ¸ ¿î¿µÃ¼Á¦¸¦ üũÇϽ÷Á¸é GetOSVersionType() ÇÔ¼ö¿¡¼­ ½ºÀ§Ä¡¹® ³»¿ëÀ» ¾Æ·¡¿Í °°ÀÌ
¼öÁ¤ÇÏ½Ã¸é µË´Ï´Ù.

    case VER_PLATFORM_WIN32_NT:
        if(osvi.dwMajorVersion <= 4) version = 4;
        else if(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) version = 5;
        else if(version_ex_flag){
            if(osvi.dwMajorVersion == 5) version = 6;  // XP
            else if(osvi.dwMajorVersion == 6) version = 7;  // ºñ½ºÅ¸...
        }
        break;
¿î¿µÁø   09-11-02 20:15
À©µµ¿ìÁî 7(Windows7)Àº Windows Vista¿Í ¸¶Âù°¡Áö·Î 7(version = 7)ÀÌ ¹ÝȯµË´Ï´Ù.