Develop
2013.04.23 15:45
[c++] Win32API를 이용한 ExitWindowsEx 사용한 예제코드
조회 수 8004 댓글 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
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
165 | Develop |
[ios] How To Use UIScrollView to Scroll and Zoom Content (Using Objective-C)
![]() |
hooni | 2016.03.23 | 1779 |
164 | Develop |
[ios] How To Use UIScrollView to Scroll and Zoom Content (Using Swift)
![]() |
hooni | 2016.03.23 | 7732 |
163 | Develop | [ios] Did UIScrollView End Scrolling? | hooni | 2016.04.19 | 1186 |
162 | Develop | [io] Apple Watch, Today Extension 앱ID 설정 | hooni | 2016.04.20 | 955 |
161 | Develop |
XE Core 1.8.18 본문 작성시 태그(html) 사라지는 버그
![]() |
hooni | 2016.04.21 | 1037 |
160 | PPT |
[ppt] 전자금융보안론 발표/설치 자료
![]() |
hooni | 2016.05.03 | 1479 |
159 | Develop |
[c#] 전자금융보안론 발표/설치 자료(툴바 소스코드)
![]() |
hooni | 2016.05.07 | 0 |
158 | Develop |
[ios] UUID 생성 + Key Chain 연동
![]() |
hooni | 2016.05.13 | 4810 |
157 | Develop |
[ios] 기본 네비게이션바의 타이틀, back버튼 위치와 속성 변경
![]() |
hooni | 2016.05.16 | 2210 |
156 | Etc |
플라스터(Plaster) 수업 내용
![]() |
hooni | 2016.05.24 | 0 |
155 | Develop |
[ios] 웹뷰 history.back() ㅋㄷ
![]() |
hooni | 2016.06.27 | 2055 |
154 | Develop |
[ios][swift] 초간단 TableView 샘플
![]() |
hooni | 2016.06.27 | 882 |