Develop
2013.04.23 15:45
[c++] Win32API를 이용한 ExitWindowsEx 사용한 예제코드
조회 수 9395 댓글 0
필요하실 분도 있을 듯 해서 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
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|---|
| 745 | Develop | [js] 자바스크립트의 클로저 (JavaScript's Closure) | hooni | 2013.05.15 | 13863 |
| 744 | Develop | 서기의 PHP 동영상 강의(싱싱해) | hooni | 2013.05.15 | 32108 |
| 743 | Etc | 영어공부에 도움될만한 사이트 모음 | hooni | 2013.05.14 | 23897 |
| 742 | System/OS | Mac OS X - Apache+PHP+MySQL 환경 서버 | hooni | 2013.04.25 | 38565 |
| 741 | System/OS | [mysql] mysql user 생성시 ERROR 1364 | hooni | 2013.04.25 | 29521 |
| 740 | System/OS |
맥에서 파일공유 (윈도우,맥)
|
hooni | 2013.04.25 | 38592 |
| 739 | Develop | [js]모바일 웹에서 orientationchange | hooni | 2013.04.23 | 21020 |
| 738 | Develop | [android] keytool을 사용하여 키스토어 생성 | hooni | 2013.04.23 | 70610 |
| 737 | Develop | [js] 모바일웹에서 이미지 저장하는거 (context menu) 막기 | hooni | 2013.04.23 | 27501 |
| 736 | Develop | [js] JSON 컨트롤.. 재귀호출로 값 출력하기 | hooni | 2013.04.23 | 29655 |
| 735 | Develop |
[iphone] 파일 업로드 샘플 코드 ㅎㅎ
|
hooni | 2013.04.23 | 11120 |
| 734 | Develop |
[node.js] 지금 하고 있는거..
|
hooni | 2013.04.23 | 28242 |