Форум: "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