==for Delphi

ShutDown(dwTimeOut : DWord = 0; bForceClose : Boolean = true; bReboot : Boolean = false) ;
var
  PreviosPrivileges: ^TTokenPrivileges;
  TokenPrivileges: TTokenPrivileges;
  hToken: THandle;
  tmpReturnLength: DWord;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then begin
    if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin
      LookupPrivilegeValue(Nil, 'SeShutdownPrivilege', TokenPrivileges.Privileges[0].Luid); 
      TokenPrivileges.PrivilegeCount := 1;
      TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      tmpReturnLength := 0;
      PreviosPrivileges := nil;
      AdjustTokenPrivileges(hToken, False, TokenPrivileges, 0, PreviosPrivileges^, tmpReturnLength);

      if InitiateSystemShutdown(Nil, Nil, dwTimeOut, bForceClose, bReboot) then begin
        TokenPrivileges.Privileges[0].Attributes := 0;
        AdjustTokenPrivileges(hToken, False, TokenPrivileges, 0, PreviosPrivileges^, tmpReturnLength);
      end ;
    end ;
  end
  else
  ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN or EWX_POWEROFF, 0);
end ; 


==for C++

void ShutDown( DWORD dwTimeOut /*= 0*/,bool bForceClose /*= true*/, bool bReboot /*= false*/ )
{

    TOKEN_PRIVILEGES* PreviosPrivileges= NULL;
    volatile TOKEN_PRIVILEGES TokenPrivileges;
   
    HANDLE hToken;
    DWORD tmpReturnLength;

    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        LookupPrivilegeValueW(NULL, SE_SHUTDOWN_NAME, (PLUID)&(TokenPrivileges.Privileges[0].Luid));
        TokenPrivileges.PrivilegeCount = 1;
        TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken, false, (PTOKEN_PRIVILEGES)&TokenPrivileges, 0, PreviosPrivileges, NULL);
       
        if (InitiateSystemShutdownW(NULL, NULL, dwTimeOut, bForceClose, bReboot))
        {
            TokenPrivileges.Privileges[0].Attributes = 0;
            AdjustTokenPrivileges(hToken, false, (PTOKEN_PRIVILEGES)&TokenPrivileges, 0, PreviosPrivileges, &tmpReturnLength);
        }
    }
    else
    {
        ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN | EWX_POWEROFF, 0);
    }

}

분류 :
Win32
조회 수 :
117032
등록일 :
2008.09.19
14:35:28 (*.149.217.155)
엮인글 :
http://www.lunapiece.net/356/18c/trackback
게시글 주소 :
http://www.lunapiece.net/356
문서 첨부 제한 : 0Byte/ 10.00MB
파일 제한 크기 : 10.00MB (허용한 확장자만 첨부할 수 있습니다.(관리자는 제외) : *.*)
옵션 :
:
:
:
:
List of Articles
번호 제목 글쓴이 날짜 조회 수
21 Visual C++ Templete을 이용하여 BC++ OnClick 이벤트 VC++에서 흉내내보기 Lyn 2008-09-27 30934
20 Delphi / BCB SpeedButton 투명하게하기 Lyn 2008-09-19 16517
» Win32 시스템 종료 함수 Lyn 2008-09-19 117032
18 Delphi / BCB 폼을 그림 모양대로 잘라내기 Lyn 2008-09-19 16724
17 Win32 Window 투명화 (Layerd Window) Lyn 2008-09-19 20038
16 Win32 파일이 존재하는지 확인하는 함수 Lyn 2008-09-19 19582
15 Visual C++ Window 최대, 최소 크기 정하기 Lyn 2008-09-17 18411
14 Win32 프로그램이 죽었는지 살았는지 확인만 하고 싶은경우 Lyn 2008-09-17 15292
13 Visual C++ 컨트롤 원하는대로 수정한 클래스 만들기 (기초) Lyn 2008-09-06 18509
12 Win32 데스크탑 영역 구하기 Lyn 2008-08-21 14320
11 Win32 마우스 일정 영역에 가두기 Lyn 2008-08-21 15633
10 Delphi / BCB 재귀 호출을 이용한 폴더내의 파일 전부 검색하기 Lyn 2008-08-15 17228
9 Delphi / BCB 타이틀바가 없는 폼 이동하기. Lyn 2008-08-15 127645
8 Delphi / BCB PChar 과 ShortString 타입 서로 변경하는 방법. Lyn 2008-08-15 14050
7 Visual C++ Alt + F4 막기 Lyn 2008-08-15 18105
6 Win32 Program Files 폴더 동적으로 가져오기. Lyn 2008-08-15 17950
5 Visual C++ Esc키와 Enter키로 다이얼로그 종료되는것 막기 Lyn 2008-08-15 19618
4 Win32 쓰래드에 이름 지정하기 Lyn 2008-08-15 20591
3 Delphi / BCB Delphi 에서 메모리 릭 체크하는 방법 Lyn 2008-08-15 18354
2 Delphi / BCB 폼을 띄울때, 작업표시줄에 폼이 표시되게 하는 방법. Lyn 2008-08-15 14158

SITE LOGIN :)