Главная страница
    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.47 MB
Время: 0.061 c
8-1099763404
focor
2004-11-06 20:50
2005.02.20
Multyinstal


3-1106348562
NeedHelp
2005-01-22 02:02
2005.02.20
data.MB zanimaet 16 MB ?? 4to delat ??? eto ved mnogo =(


14-1107268862
Шишкин Илья
2005-02-01 17:41
2005.02.20
Ping в PHP


14-1106400846
Валерий
2005-01-22 16:34
2005.02.20
Поздравьте меня. Начинаю жить по новому


3-1105706839
ora_user
2005-01-14 15:47
2005.02.20
Подключение к Oracle.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский