Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
4-1105350722
Дармидон
2005-01-10 12:52
2005.02.20
Как из службы запустить программу?


1-1107780689
hgd
2005-02-07 15:51
2005.02.20
Скажите а есть аналоги функци BitBlt


6-1102601820
Luke
2004-12-09 17:17
2005.02.20
про idHTTP


4-1104759069
Сергей+
2005-01-03 16:31
2005.02.20
Инвертирование цвета


1-1107715358
Владимир Кладов
2005-02-06 21:42
2005.02.20
помогите "чайнику"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский