검색결과 리스트
글
윈도우를 종료시키는 방법에 대해서 알아 보겠습니다.
어플리케이션에서 윈도우를 종료하는 거라면, ExitWindowsEx 를 사용하면 됩니다.
그런데, 만약 어플리케이션이 아니라, 윈도우 서비스로 돌고있는 녀석이 있다고 가정해 봅시다.
그리고 이 서비스에서 윈도우를 종료시키려고 합니다.
이때, ExitWindowsEx 를 사용하면, 제대로 동작하지 않습니다. 아니, 아무런 반응도 없습니다.
그럼 어떻게 해야 할까요...?
아래와 같이 권한을 먼저 얻은 뒤에 호출해 주면 됩니다. :)
[Service 에서 동작하는 System Off 하는 코드]
BOOL GrabPrivilege (LPCTSTR lpctPrivName)
{
TOKEN_PRIVILEGES newtkp;
HANDLE hToken;
BOOL bRetVal = FALSE;
if (OpenProcessToken (GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
LookupPrivilegeValue (NULL, lpctPrivName, &newtkp.Privileges[0].Luid);
newtkp.PrivilegeCount = 1;
newtkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (AdjustTokenPrivileges (hToken, FALSE, &newtkp, 0, (PTOKEN_PRIVILEGES) NULL, 0))
{
DWORD dwRet = GetLastError();
if (dwRet == ERROR_SUCCESS) { bRetVal = TRUE; }
}
}
CloseHandle (hToken);
return bRetVal;
}
BOOL system_exit() {
if (GrabPrivilege (SE_SHUTDOWN_NAME)) {
if (ExitWindowsEx(EWX_FORCE | EWX_POWEROFF, 0)) {
return TRUE;
}
}
return FALSE;
}
'Microsoft > Tips' 카테고리의 다른 글
C++ 에서 base64 로 인코딩하기 (3) | 2012.05.08 |
---|---|
Windows 에서 파일을 연결프로그램으로 실행하는 방법 (0) | 2011.09.20 |
리눅스 제거하기 (1) | 2011.02.04 |
RECENT COMMENT