고수닷넷 - 데미소다오렌지님
프로그램을 작성하다 보면 종종 윈도우 시스템을 종료 시켜야 하는 상황이 발생합니다. Windows 9x의 경우에는 단순히 ExitWindowsEx API를 호출함으로써 윈도우를 종료 할 수 있으나, NT 계열에서는 그게 되지 않습니다. 그 이유는 NT 계열에서 도입된 권한 체계때문입니다. 시스템을 종료시키는 API를 사용하려면 Shutdown 권한을 가지고 있어야 합니다.
아래 코드는 그러한 NT 계열에서 Shutdown 권한 획득후 윈도우를 종료 시키는 방법을 보여주고 있습니다.
VOID ShutDown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return;
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
// Cannot test the return value of AdjustTokenPrivileges.
if (GetLastError() != ERROR_SUCCESS)
return;
ExitWindowsEx(EWX_POWEROFF, 0);
}
"Win32 API" 카테고리의 다른 글
- 클립보드 모니터링 하기 (0)2007/01/03
- TRACE 매크로를 구현하는 방법 (0)2007/01/02
- 윈도우 종료 시키기 (0)2007/01/02
- 작업관리자에 표시되는 응용프로그램 열거하기 (0)2007/01/02
- 트레이로 내려가는 애니메이션 출력 (0)2007/01/02
Tags 윈도우 종료

수안이의 컴퓨터 연구실



Leave your greetings.