Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-71071
BAY
2002-08-02 20:30
2002.08.22
Lock


1-71222
Banan
2002-08-09 19:27
2002.08.22
работа с ini-файлом


1-71230
V.Turecky
2002-08-11 15:26
2002.08.22
Нужен пример с использованием BM_SETCHECK. Любой.


1-71201
Schummi
2002-08-03 07:57
2002.08.22
Help, please!!!


1-71076
Сережа
2002-08-12 11:13
2002.08.22
Удаление автозагрузки из реестра





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