Форум: "WinAPI";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Внизперезагрузка Windows Найти похожие ветки
← →
stikriz (2002-06-16 03:44) [0]Что я делаю не так?
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, "SE_SYSTEMTIME_NAME",tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength)then
ExitWindowsEx(EWX_FORCE or EW_REBOOTSYSTEM , 0);
end;
А в ответ ничего не происходит.
← →
ZZ (2002-06-16 04:00) [1]А почему именно "SE_SYSTEMTIME_NAME"? Там надо SE_SHUTDOWN_NAME (и вроде даже без кавычек )
← →
stikriz (2002-06-16 04:07) [2]Я ставил уже SE_SHUTDOWN_NAME. И если его поставить, то тоже не будет перегружаться. Можно просто выключить, если добавить or EWX_REBOOT. А почему без кавычек? Вот как объявлено в windows.pas
function LookupPrivilegeValue(lpSystemName, lpName: PChar;
var lpLuid: TLargeInteger): BOOL; stdcall;
Николай.
← →
GOOFFY (2002-06-16 11:08) [3]Удалено модератором
← →
_______BAKLAN________ (2002-06-16 11:10) [4]Удалено модератором
← →
zozo lh (2002-06-16 11:12) [5]Удалено модератором
← →
dexter (2002-06-16 11:13) [6]Удалено модератором
← →
stikriz (2002-06-16 11:14) [7]Удалено модератором
← →
GOOFFY (2002-06-16 11:17) [8]Удалено модератором
← →
stikriz (2002-06-16 18:03) [9]Чего это модератор все удаляет?
← →
ZZ (2002-06-17 01:08) [10]А откуда такая интересная константа - EW_REBOOTSYSTEM ??
Там вроде были только EWX_POWEROFF EWX_REBOOT EWX_SHUTDOWN
← →
stikriz (2002-06-17 01:21) [11]Привет.
> А откуда такая интересная константа - EW_REBOOTSYSTEM
Чуть повыше по исходникам windows.pas поднимись.
Я тут поискал на сайте и кое-что нашел. После небольшой правки (человек, наверное, по памяти писал, поэтому были опечатки) работает как часы. Советую модератору поместить этот код в фак.
procedure TForm1.Button1Click(Sender: TObject);
begin
self.WinExit(EWX_REBOOT or EWX_FORCE); // Перезагрузка
end;
function TForm1.SetPrivilege(aPrivilegeName : string;
aEnabled : boolean ): boolean;
var
TPPrev,
TP : TTokenPrivileges;
Token : THandle;
dwRetLen : DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token );
TP.PrivilegeCount := 1;
if( LookupPrivilegeValue(nil, PChar( aPrivilegeName ),
TP.Privileges[ 0 ].LUID ) ) then
begin
if( aEnabled )then
TP.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
else
TP.Privileges[0].Attributes:= 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(Token,False,TP,
SizeOf( TPPrev ),
TPPrev,dwRetLen );
end;
CloseHandle( Token );
end;
function TForm1.WinExit( iFlags : integer ) : boolean;
// возможные флаги:
// EWX_LOGOFF
// EWX_REBOOT
// EWX_SHUTDOWN
begin
Result := True;
if( SetPrivilege( "SeShutdownPrivilege", true ) ) then
begin
if( not ExitWindowsEx( iFlags, 0 ) )then
begin
Result := False;
end;
SetPrivilege( "SeShutdownPrivilege", False )
end
else
begin
Result := False;
end;
end;
← →
ZZ (2002-06-17 10:50) [12]stikriz
А ты в фак вообще заглядывал ? :)
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621105&n=15
Чуть повыше по исходникам windows.pas поднимись.
Мало ли что в Windows.pas описано. Какое это отношение имеет к ExitWindowsEx ? Или у меня MSDN старый или такой константы там не предусмотрено.
← →
Kuljok (2002-06-17 14:33) [13]В общем исходя из примера и глядя в winnt.pas
const
SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
перезагрузка такая вот будет
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken) then Application.MessageBox("Ошибка открытия процесса", "ОШИБКА", MB_OK);
LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), @old_tkp, ReturnLength);
if GetLastError <> ERROR_SUCCESS then Application.MessageBox("Ошибка получения привилегии",
"ОШИБКА",MB_OK) else
ExitWindowsEx(EWX_FORCEIFHUNG or EWX_REBOOT , 0);
← →
ZZ (2002-06-17 16:15) [14]Kuljok
Маладэц
← →
ZZ (2002-06-17 16:18) [15]и где ты взял winnt.pas ?
← →
Kuljok (2002-06-17 19:52) [16]Эээээээ... Винават... "winnt.h".
"winnt.pas" нету...., SE_SHUTDOWN_NAME ваще ниде не объявлен. Ну или точнее я его не нашел....
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c