안녕하세요.
필요한 일이 있어서 Windows NT를 재부팅할 수 있는 프로그램을 찾다가 아래와 같은
것이 가능하다기에 델파이로 실행을 해보니 Run조차 되지를 않았습니다.
======================================================================
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;
==================================================================
에러메세지는 다음과 같습니다.
Error[41] : 'Types of actual and formal var parameters must be identical'
Error[47] : 'Types of actual and formal var parameters must be identical'
즉, AdjustTokenPrivileges()함수가 쓰여진 줄에서 에러가 발생합니다.
누군가 이 함수가 에러가 없다고 하였는데 저는 왜 이런 에러가 발생하여 실행조차 되지 않는지 모르겠습니다.
고수님들이 한수 지도 부탁드립니다.
ExitWindowsEx(EWX_REBOOT,0) ; // 재부팅
이 명령이 작동되는지 모르겠네요... 한번 해보세요..
홍진혁 wrote:
> 안녕하세요.
>
> 필요한 일이 있어서 Windows NT를 재부팅할 수 있는 프로그램을 찾다가 아래와 같은
> 것이 가능하다기에 델파이로 실행을 해보니 Run조차 되지를 않았습니다.
>
> ======================================================================
> 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;
> ==================================================================
>
> 에러메세지는 다음과 같습니다.
> Error[41] : 'Types of actual and formal var parameters must be identical'
> Error[47] : 'Types of actual and formal var parameters must be identical'
>
> 즉, AdjustTokenPrivileges()함수가 쓰여진 줄에서 에러가 발생합니다.
>
> 누군가 이 함수가 에러가 없다고 하였는데 저는 왜 이런 에러가 발생하여 실행조차 되지 않는지 모르겠습니다.
>
> 고수님들이 한수 지도 부탁드립니다.
>