Contents

조회 수 7965 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
필요하실 분도 있을 듯 해서 2001년도에 짰던 것 같네요.
윈도우즈2000 계열의 파워 끄는 소스코드입니다.
VC6.0으로 짰고, 프로그램을 하실 줄 아시면 뭐하는 것인 지 금방 아실 듯.

PwrTest.h
#if !defined(AFX_PWRTEST_H__149C02D0_B545_4699_A4A5_DFDB719EFBFB__INCLUDED_)
#define AFX_PWRTEST_H__149C02D0_B545_4699_A4A5_DFDB719EFBFB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "resource.h"

/////////////// Jiseok
int PowerOff();
int Reboot();
int GetWinVersion(OSVERSIONINFO* windowsversion);
int DoPowerOff(OSVERSIONINFO* windowsversion);
int DoReboot(OSVERSIONINFO* windowsversion);
int AquirePrivileges(OSVERSIONINFO* windowsversion);
////////////// end Jiseok

#endif 
//!defined(AFX_PWRTEST_H__149C02D0_B545_4699_A4A5_DFDB719EFBFB__INCLUDED_)

PwrTest.cpp
// PwrTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PwrTest.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// The one and only application object
//

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: change error code to suit your needs
        cerr << _T("Fatal Error: MFC initialization failed") << endl;
        nRetCode = 1;
    }
    else
    {
        // TODO: code your application's behavior here.

        //if (PowerOff()!=0)
        if (Reboot()!=0)
            return 1;

        CString strHello;
        strHello.LoadString(IDS_HELLO);
        cout << (LPCTSTR)strHello << endl;
    }

    return nRetCode;
}

int PowerOff()
{
    OSVERSIONINFO Version;

    if (GetWinVersion(&Version)!=0)
        return -1;
    if (DoPowerOff(&Version)!=0)
        return -1;
    return 0;
}

int Reboot()
{
    OSVERSIONINFO Version;

    if (GetWinVersion(&Version)!=0)
        return -1;
    if (DoReboot(&Version)!=0)
        return -1;
    return 0;
}

int GetWinVersion(OSVERSIONINFO* windowsversion)
{
    windowsversion->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
    if (!GetVersionEx(windowsversion))
    {
        printf("Error! getting version info");
        return -1;
    }
    return 0;
}

int DoPowerOff(OSVERSIONINFO* windowsversion)
{
    UINT mode;

    if (windowsversion->dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
        mode=EWX_SHUTDOWN;
    else
        mode=EWX_POWEROFF;

    if (windowsversion->dwPlatformId==VER_PLATFORM_WIN32_NT)
        {
        // privilege 얻기
        if (AquirePrivileges(windowsversion)!=0)
        {
            return -1;
        }//if 
    }// if
  
    if (!ExitWindowsEx(mode,0))    // 끄기
    {
        printf("error ExitWindowsEx");
        return -1;
    }
    return 0;
}

      
int DoReboot(OSVERSIONINFO* windowsversion)
{
    UINT mode;

    mode=EWX_REBOOT;

    if (windowsversion->dwPlatformId==VER_PLATFORM_WIN32_NT)
        {
        // privilege 얻기
        if (AquirePrivileges(windowsversion)!=0)
        {
            return -1;
        }//if 
    }// if
  
    if (!ExitWindowsEx(mode,0))    // 끄기
    {
        printf("error ExitWindowsEx");
        return -1;
    }
    return 0;
}

int AquirePrivileges(OSVERSIONINFO* windowsversion)
{
    HANDLE current_thread,token;
    TOKEN_PRIVILEGES privs;
    LUID luid;

    current_thread=GetCurrentProcess();
    if (!OpenProcessToken(current_thread,TOKEN_ADJUST_PRIVILEGES,&token))
    {
        printf("Error! opening process token");
        return -1;
    }
    if (!LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid))
    {
        printf("Error! looking up privilege");
        return -1;
    }
    privs.PrivilegeCount=1;
    privs.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    privs.Privileges[0].Luid=luid;
    if (!AdjustTokenPrivileges(token,FALSE,&privs,0,NULL,NULL))
    {
        printf("Error! getting privileges");
        return -1;
    }
    return 0;
}
[출처] http://kldp.org/node/28417

?

  1. '2014 모바일 개발 트렌드' 발표자료입니다.

    Date2014.10.02 CategoryDevelop Byhooni Views990
    Read More
  2. Aspect Oriented Programming in Objective-C

    Date2015.05.18 CategoryDevelop Byhooni Views678
    Read More
  3. DDay Memo 1.9.4 소스코드

    Date2015.10.03 CategoryDevelop Byhooni Views0
    Read More
  4. GCM 사용하기 2 (단말에 GCM 구현하기)

    Date2013.07.06 CategoryDevelop Byhooni Views23249
    Read More
  5. GCM 사용하기 3 (JSP로 GCM 푸시 서버 만들기)

    Date2013.07.06 CategoryDevelop Byhooni Views25317
    Read More
  6. git 브런치 배우기 (링크)

    Date2013.07.09 CategoryDevelop Byhooni Views20572
    Read More
  7. GPL, AGPL, MPL,.. 한눈에 보는 오픈소스SW 라이선스

    Date2014.10.14 CategoryDevelop Byhooni Views1147
    Read More
  8. How to Test SMTP AUTH using Telnet

    Date2018.04.05 CategoryDevelop Byhooni Views1345
    Read More
  9. JSON, BSON 변환

    Date2013.04.23 CategoryDevelop Byhooni Views11814
    Read More
  10. Laravel 5 Failed opening required bootstrap/../vendor/autoload.php

    Date2018.01.24 CategoryDevelop Byhooni Views1666
    Read More
  11. Mac OS 에 Jenkins 설치하기 (Homebrew)

    Date2017.03.15 CategoryDevelop Byhooni Views8144
    Read More
  12. macOS에 node, npm 설치하기 (homebrew)

    Date2021.11.06 CategoryDevelop Byhooni Views1154
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 71 Next
/ 71