Q&A

  • NT에서 윈도우즈 재시작과 종료는? 도와주세요^^
안녕하세요.. 델파이를 사랑하는 여러분..



다름이 아니라 윈도우즈를 종료하고 재시작하는데 있어서 좀 의하한게 있어서

이렇게 글을 올립니다.



분명히 도움말에는 된다고 하는데 제가 뭘 잘못했나요..?



제가쓴 함수는 ExitWindowsEx(EWX_FORCE or EWX_REBOOT, 0); 입니다.



그런데 95,98에서는 되는데 NT에서는 되질 않는군요..



이문제를 아시는 분은 제발 도와주세요..^^

Microsoft가 왠지 밉군요..^^이럴땐....



그럼, 즐거운 하루가 되세요..



2  COMMENTS
  • Profile
    구창민 2000.06.11 05:24
    박대규 wrote:

    > 안녕하세요.. 델파이를 사랑하는 여러분..

    >

    > 다름이 아니라 윈도우즈를 종료하고 재시작하는데 있어서 좀 의하한게 있어서

    > 이렇게 글을 올립니다.

    >

    > 분명히 도움말에는 된다고 하는데 제가 뭘 잘못했나요..?

    >

    > 제가쓴 함수는 ExitWindowsEx(EWX_FORCE or EWX_REBOOT, 0); 입니다.

    >

    > 그런데 95,98에서는 되는데 NT에서는 되질 않는군요..

    >

    > 이문제를 아시는 분은 제발 도와주세요..^^

    > Microsoft가 왠지 밉군요..^^이럴땐....

    >

    > 그럼, 즐거운 하루가 되세요..

    >



    안녕하세요~ 구창민입니다.



    이미 오래전에 뉴스그룹에 소개되었던 내용이죠. ^^;



    NT는 일반적인 ExitWindowsEX 함수가 서포트를 하지 안습니다.



    대신 AdjustTokenPrivileges를 이용하시면 가능합니다.



    제가 일전에 테스트 했을때 완벽히 동작했습니다.



    그럼~ 즐거운 프로그래밍 하시길~



    var

    PreviosPrivileges : ^TTokenPrivileges;

    TokenPrivileges : TTokenPrivileges;

    ProcessHandle : THandle;

    tmp : Integer;

    begin

    if not OpenProcessToken( GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,ProcessHandle ) then

    Exit;



    LookupPrivilegeValue( '', 'SeShutdownPrivilege', TokenPrivileges.Privileges[0].Luid );

    TokenPrivileges.PrivilegeCount := 1;

    TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

    tmp := 0;

    PreviosPrivileges := nil;

    AdjustTokenPrivileges(ProcessHandle, False, TokenPrivileges, 0, PreviosPrivileges^, tmp);

    if not GetLastError()=ERROR_SUCCESS then

    Exit;

    if not InitiateSystemShutdown( '', '', 0, True, True ) then

    Exit;

    TokenPrivileges.Privileges[0].Attributes := 0;

    AdjustTokenPrivileges( ProcessHandle, False, TokenPrivileges, 0,PreviosPrivileges^, tmp );

    end;

  • Profile
    타락천사 2000.06.11 03:26
    안녕하세여.. 타락임다..^^



    도움말에 된다구 나왔나여? ^_____________________________^



    윈9X에선 학실히 되구여, NT에서두 되긴 되는데 조금 다르게 해야해여..



    그러니 안되는건 아니져... ^^