Исходники.Ру Блог Каталог Магазин Обзоры Новости Реклама hhb.su Все проекты

Форум по программированию

Сентября 03, 2010, 11:34:28 am *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: ЦентрЭлектроМонтаж yarcem.ru ГОСТы
 
   Начало   Помощь Поиск Календарь Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в С++ реализовать перезагрузку WinXP ?  (Прочитано 1442 раз)
0 Пользователей и 1 Гость смотрят эту тему.
expert32win
Гость
« : Октября 01, 2006, 09:18:54 am »

Как в С++ реализовать перезагрузку WinXP  в экстренном режиме тоесть без сохранения всех настроек (примерно как через RESET ) ?
Дайте пример кода для консольного приложения пожалуйста.
prayer
Коллежский асессор
*****

Репутация: 1
prayer не имеет никакого влияния.
Offline Offline

Сообщений: 258


« Ответ #1 : Октября 01, 2006, 01:14:29 pm »

Юзай ExitWindowsEx, не забыв в флаги поместить EWX_FORCE.
Только зачем такое издевательство над системой?
expert32win
Гость
« Ответ #2 : Октября 01, 2006, 02:35:46 pm »

Огромное спасибо. Все работает.
expert32win
Гость
« Ответ #3 : Октября 01, 2006, 06:18:01 pm »

К сожалению в Win XP этим методом можно добится лишь LogOff
В сети по этому поводу пишут такие страшные вещи будто для нормального функционирования ExitWindowsEx в XP следует получить какие то права доступа к некоторым ресурсам системы или что то типа того.
Че как и где их получит кто-нить может толком обьяснить ?
Samael
Шпийон Сарумяна
Вице-канцлер
*****

Репутация: 70
Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.
Offline Offline

Пол: Мужской
Сообщений: 3543
SkypeID: kornev.vladimir


Гик - это не профессия, гик - это призвание...


WWW
« Ответ #4 : Октября 01, 2006, 06:44:15 pm »

Если не ошибаюсь, то тебе нужно иметь права SYSTEM. А вообще скинь плиз ссылку на эти места "в сети", где про это пишут -- интересно почитать =)
expert32win
Гость
« Ответ #5 : Октября 01, 2006, 08:54:47 pm »

http://www.codenet.ru/progr/vbasic/shutdown.php

Вот ссылка. Там есть пример этого кода для С++ но у меня он не пошел :(
Samael
Шпийон Сарумяна
Вице-канцлер
*****

Репутация: 70
Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.
Offline Offline

Пол: Мужской
Сообщений: 3543
SkypeID: kornev.vladimir


Гик - это не профессия, гик - это призвание...


WWW
« Ответ #6 : Октября 01, 2006, 10:03:50 pm »

Гм.. не знаю, что у тебя там не работает, но следующий код отлчно ребутает машину
Код: (cpp) [Выделить]
  1. #include "windows.h"
  2.  
  3. // Определяем параметры
  4. typedef enum _SHUTDOWN_ACTION
  5. {
  6. ShutdownNoReboot,
  7. ShutdownReboot,
  8. ShutdownPowerOff
  9. } SHUTDOWN_ACTION;
  10.  
  11. // Прототип функции
  12. typedef DWORD (WINAPI* ntShutdownSystem)(SHUTDOWN_ACTION Action);
  13.  
  14. int _tmain(int argc, _TCHAR* argv[])
  15. {
  16. HANDLE h;
  17. // Получаем адрес процедуры
  18.    ntShutdownSystem NtShutdownSystem = (ntShutdownSystem)::GetProcAddress(::GetModuleHandleA("ntdll.dll"), "NtShutdownSystem");
  19.    if (!NtShutdownSystem) { return 0; }
  20. // Открываем токен текущего процесса
  21.    if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES, &h))
  22.    {
  23.        // Если все в порядке
  24.        TOKEN_PRIVILEGES tp;
  25.        tp.PrivilegeCount=1;
  26.        // Получаем привилегии
  27. if(!LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, &(tp.Privileges[0].Luid)))
  28. { return 0; }
  29.        // Изменяем
  30.        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  31.        // Устанавливаем новые привилегии
  32. ::AdjustTokenPrivileges(h, false, &tp, sizeof(tp), NULL, NULL);
  33. // Перегружаем
  34. NtShutdownSystem(ShutdownReboot);
  35. // Закрываем хендл
  36.        CloseHandle(h);
  37.    }
  38. return 0;
  39. }
  40.  

   
Samael
Шпийон Сарумяна
Вице-канцлер
*****

Репутация: 70
Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.
Offline Offline

Пол: Мужской
Сообщений: 3543
SkypeID: kornev.vladimir


Гик - это не профессия, гик - это призвание...


WWW
« Ответ #7 : Октября 01, 2006, 10:05:39 pm »

Кстати, забыл сказать: достало чистить твои темы, эта конкретно не имеет никакого отношения к Вижуалу... Напиши, что ты понял, а то у тебя сложилась традиция создавать новые темы, а не искать перенесенные.
expert32win
Гость
« Ответ #8 : Октября 01, 2006, 10:08:42 pm »

Я понял :)
expert32win
Гость
« Ответ #9 : Октября 01, 2006, 10:19:27 pm »

Ах да, насчет того что неработает..
Выдает следующую ошибку этого кода:
syntax error : identifier '_TCHAR'
Samael
Шпийон Сарумяна
Вице-канцлер
*****

Репутация: 70
Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.Samael обладает мощной волей.
Offline Offline

Пол: Мужской
Сообщений: 3543
SkypeID: kornev.vladimir


Гик - это не профессия, гик - это призвание...


WWW
« Ответ #10 : Октября 01, 2006, 10:22:00 pm »

Рррррррр... Ты сколько на ВС пишешь?
Просто скопируй кусками все что до ф-ии main, а потом все что внутри нее и вставь в свой шаблон, создаваемый студией.
expert32win
Гость
« Ответ #11 : Октября 01, 2006, 10:23:21 pm »

:) извини, я больше не буду
Страниц: [1]   Вверх
  Печать  
 
 


Rambler's Top100 Рейтинг@Mail.ru


Powered by SMF 2.0 Beta 3.1 Public | SMF © 2006–2008, Simple Machines LLC
Страница сгенерирована за 0.272 секунд. Запросов: 23.
Обновления форума в формате RSS