Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обьясните код 
:(
    Опции темы
Darkmaster
Дата 13.6.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



помогите разобратся что тут к чему:
Код

program shut;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

var
  logoff: Boolean = False;
  reboot: Boolean = False;
  warn: Boolean = False;
  downQuick: Boolean = False;  
  cancelShutdown: Boolean = False;
  powerOff: Boolean = False;
  timeDelay: Integer = 0;

function HasParam(Opt: Char): Boolean;
var
  x: Integer;
begin
  Result := False;
  for x := 1 to ParamCount do
    if (ParamStr(x) = '-' + opt) or (ParamStr(x) = '/' + opt) then Result := True;  
end;  

function GetErrorstring: string;
var  
  lz: Cardinal;  
  err: array[0..512] of Char;  
begin
  lz := GetLastError;  
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil);  
  Result := string(err);
end;  

procedure DoShutdown;
var  
  rl, flgs: Cardinal;
  hToken: Cardinal;  
  tkp: TOKEN_PRIVILEGES;  
begin  
  flgs := 0;
  if downQuick then flgs := flgs or EWX_FORCE;
  if not reboot then flgs := flgs or EWX_SHUTDOWN;
  if reboot then flgs := flgs or EWX_REBOOT;
  if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF;  
  if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or  
      EWX_LOGOFF;  
  if Win32Platform = VER_PLATFORM_WIN32_NT then  
  begin  
    if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,  
      hToken) then  
      Writeln('Cannot open process token. [' + GetErrorstring + ']')  
    else  
    begin
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then  
      begin  
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;  
        tkp.PrivilegeCount           := 1;  
        AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);  
        if GetLastError <> ERROR_SUCCESS then  
          Writeln('Error adjusting process privileges.');  
      end  
      else  
        Writeln('Cannot find privilege value. [' + GetErrorstring + ']');
    end;  
   
  end;  
  //     else begin  
  ExitWindowsEx(flgs, 0);  
  //     end;  
end;  

begin
powerOff := True;
DoShutdown;
end.

 
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Yanis
Дата 13.6.2006, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Таааккк.... Может быть вопросы задавать начнёшь? Или тебе полностью рассказать от того, что такое apptype console до того как в Windows проиходит загрузка исполнительных файлов... 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 13.6.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Код запустить не пробовал?? Запусти, посмотри что к чему. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Albinos_x
Дата 13.6.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Sunvas, 
вот видимо по этому и спрашивает smile 
не охота мне сейчас поисками заниматься....воть... да простят меня модераторы smile  


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Mechanic
  Дата 14.6.2006, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



А я объясню..  smile 
Этот код просто выключит комп.

Добавлено @ 08:39 
Цитата(Jey_k @  13.6.2006,  23:34 Найти цитируемый пост)
Выключение и перезагрузка в ХР, Напомните с привелегиями(покороче)

 smile   

Это сообщение отредактировал(а) Mechanic - 14.6.2006, 08:41
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
Darkmaster
Дата 14.6.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 22.11.2005

Репутация: нет
Всего: нет



Конкретно не понятно вото что:
Код

function HasParam(Opt: Char): Boolean;    
var    
  x: Integer;    
begin    
  Result := False;    
  for x := 1 to ParamCount do    
    if (ParamStr(x) = '-' + opt) or (ParamStr(x) = '/' + opt) then Result := True;    
end;  

и вот это:
Код

begin    
    if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,    
      hToken) then    
      Writeln('Cannot open process token. [' + GetErrorstring + ']')    
    else    
    begin    
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then    
      begin    
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;    
        tkp.PrivilegeCount           := 1;    
        AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);    
        if GetLastError <> ERROR_SUCCESS then    
          Writeln('Error adjusting process privileges.');    
      end    
      else    
        Writeln('Cannot find privilege value. [' + GetErrorstring + ']');

Вот 
--------------------
GeekTV - интернет-телевидение для гиков
PM MAIL   Вверх
Alexeis
Дата 14.6.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Первая Функция проверяет присутствует ли символ opt в параметрах командной строки.
Вторая получает специальные привелегии необходимые для завершения работы Windows XP или NT 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.