Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

shut down,restart windows for ws XP,NT   Найти похожие ветки 

 
Anis   (2004-11-18 22:29) [0]

Помогите не могу перегрузить и вырубить комп в XP,она просто открывает окно для смены пользователя.
exitwindowsex(ewx_force,0)и т.д. не работает.Спасибо


 
Anatoly Podgoretsky ©   (2004-11-18 22:36) [1]

EWX_FORCE - принудительное выполнение операций, без сохранения  данных.
А операций у тебя нет.


 
Просто Джо ©   (2004-11-19 00:15) [2]

Да уж, к флагу EWX_FORCE нужно приорить флаг, который бы указывал на действие, напр:

 EWX_FORCE or EWX_REBOOT


 
Vaitek ©   (2004-11-22 20:50) [3]

А в хелпе еще написано что:

Windows NT: To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, see Privileges.

Так ли это важно? Или если я в своей системе администратор, то всо в прядке?


 
Vaitek ©   (2004-11-22 20:50) [4]

А в хелпе еще написано что:

Windows NT: To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, see Privileges.

Так ли это важно? Или если я в своей системе администратор, то всо в прядке?


 
_Дельфин_   (2004-11-22 21:12) [5]

Просто так в WinХР ты комп не выключишь. Я в свое время сам с этим мучился - а потом нашел в нете вот что:

function GetWinVersion: string;
var
 VersionInfo: TOSVersionInfo;
 OSName: string;
begin
 // устанавливаем размер записи
 VersionInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );
 if Windows.GetVersionEx( VersionInfo ) then
 begin
   with VersionInfo do
   begin
     case dwPlatformId of
       VER_PLATFORM_WIN32s: OSName := "Win32s";
       VER_PLATFORM_WIN32_WINDOWS: OSName := "Windows 95";
       VER_PLATFORM_WIN32_NT: OSName := "Windows NT";
     end; // case dwPlatformId
     Result := OSName + " Version " + IntToStr( dwMajorVersion ) + "." + IntToStr( dwMinorVersion ) +
     #13#10" (Build " + IntToStr( dwBuildNumber ) + ": " + szCSDVersion + ")";
   end; // with VersionInfo
 end // if GetVersionEx
 else
 Result := "";
end;

procedure ShutDown;
const
 SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; // Borland forgot this declaration
var
 hToken: THandle;
 tkp: TTokenPrivileges;
 tkpo: TTokenPrivileges;
 zero: DWORD;
begin
 if Pos("Windows NT", GetWinVersion) = 1 then // we"ve got to do a whole buch of things
 begin
   zero := 0;
   if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
   begin
     MessageBox(0, "Exit Error", "OpenProcessToken() Failed", MB_OK);
     Exit;
   end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)

   if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
   begin
     MessageBox(0, "Exit Error", "OpenProcessToken() Failed", MB_OK);
     Exit;
   end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)

   // SE_SHUTDOWN_NAME
   if not LookupPrivilegeValue( nil, "SeShutdownPrivilege" , tkp.Privileges[0].Luid ) then
   begin
     MessageBox(0, "Exit Error", "LookupPrivilegeValue() Failed", MB_OK);
     Exit;
   end; // if not LookupPrivilegeValue( nil, "SeShutdownPrivilege" , tkp.Privileges[0].Luid )

   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

   AdjustTokenPrivileges(hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero);
   if Boolean(GetLastError()) then
   begin
     MessageBox(0, "Exit Error", "AdjustTokenPrivileges() Failed", MB_OK);
     Exit;
   end // if Boolean( GetLastError() )
   else
     ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );

 end // if OSVersion = "Windows NT"
 else
 begin // just shut the machine down
   ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
 end; // else
end;


 
XProger ©   (2004-11-24 02:58) [6]

ShellExecute(0, "open", "shutdown -s", nil, nil, SW_NORMAL);
;)


 
pavel_guzhanov   (2004-11-24 09:04) [7]

если использовать wmi, то компьютер с winXP и 2000 вырубается влегкую, как свой собственный, так и удаленный. В этом форуме неоднократно давалась ссылка на статью про wmi, в статье есть описание и пример такой программки:
http://delphi.olympus.ru/dk/mastering/wmi.htm


 
_Nikolay ©   (2004-12-30 14:31) [8]

как настроить включение системного блока?


 
vertal ©   (2004-12-30 20:39) [9]

По моему этот код будет попроще и покороче чем в [5]

Const
SE_SHUTDOWN_NAME="SeShutdownPrivilege";

{$B-}
Function ShutdownOrReboot(dwFlags:Cardinal):Boolean;
Var
 TokenHandle:THandle;
 NewState:TOKEN_PRIVILEGES;
 ReturnLength:DWORD;
Begin
if LongInt(GetVersion())>0 then
Begin
  NewState.PrivilegeCount:=1;
  NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
  Result:=OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,TokenHandle)
    and LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,NewState.Privileges[0].Luid)
    and AdjustTokenPrivileges(TokenHandle,False,NewState,0,Nil,ReturnLength)
    and ExitWindowsEx(dwFlags,0);
End
else
  Result:=ExitWindowsEx(dwFlags,0);
End;



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
1-1107765188
hgd
2005-02-07 11:33
2005.02.20
Компонент для создания из текста в ...


1-1107715186
MMMx
2005-02-06 21:39
2005.02.20
Шифрование


3-1106060831
Prohodil Mimo
2005-01-18 18:07
2005.02.20
Почему могут глючить триггера в IB6x?


1-1107704072
Mr-JAck
2005-02-06 18:34
2005.02.20
помогите с тригонометрией


3-1106044778
Sectey
2005-01-18 13:39
2005.02.20
Отслеживание Print на клиенте (ADO)