Часовой пояс: UTC + 3 часа




Форум закрыт Новая тема / Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. Закрыто  Сообщений: 71 • Страница 4 из 4<  1  2  3  4
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 11.04.2005
CoolCmd!
Спасибо за статью, но лучше бы она мне попалась пару лет назад ;)
Сейчас стоит рейд0 из ССД, грузится быстро...

у меня вопросы:
1. что будет, если отрубят свет в режиме S3? данные то не пострадают (их свежих нет, ведь была перезагрузка), но , чисто теоретически, чем еще это чревато?
2. по логике самый лучший режим - это "Гибридный сон". - комп уходит в сон, по таймеру или ручками, после нажатия кнопки повер - все грузится из памяти (если там оно есть), - если свет моргнул - грузимся с диска (как при обычной гибернации). в любом случае - начинаем работу с того же места, а не с чистого листа, как в твоем алгоритме.
3. не мешает ли твой скрипт уходу в сон (S3) по таймеру?
. . . . еще раз спасибо за статью, довольно необычно и интересно... перезагрузиться, чтобы спать - это надо было мозг вывернуть, чтобы придумать ;)

п.с. соревнование: http://www.youtube.com/watch?v=SA7PYl6TC2Y&t=2m8s Обратите внимание на реакцию второго китайса!



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 20.11.2004
Фото: 23
Stpejiok писал(а):
Сейчас стоит рейд0 из ССД

у меня тоже ССД. 9 сек. :)

Stpejiok писал(а):
если отрубят свет в режиме S3?

проблем быть не должно.

Stpejiok писал(а):
самый лучший режим

он лучший когда комп засыпает посреди работы, когда могут пропасть данные. у нас совсем другой случай. зря потратишь время на запись памяти, плюс как я писал, упадет отзывчивость венды. если у тебя каждый день вырубают электричество, то рекомендую купить UPS. ;)

Stpejiok писал(а):
не мешает ли твой скрипт уходу в сон (S3) по таймеру?

про уход не понял. выходу не мешает.

Добавлено спустя 2 минуты 20 секунд:
Stpejiok писал(а):
реакцию второго китайса!

это не я! :old_biggrin:

_________________
Разгони форум и сайт overclockers.ru: https://coolcmd.github.io/for/
https://youtu.be/4A67iTiOD_g


 

Member
Статус: Не в сети
Регистрация: 16.11.2010
CoolCmd
Как раз на msdn написано, что функция имеет 3 параметра, первый из которых переключает S3 или S4.
Более того - эта функция никуда не пропала в Win7, а значит использовать PowerShell нет необходимости.


 

Advanced member
Статус: Не в сети
Регистрация: 20.11.2004
Фото: 23
hc4 речь идет о powrprof.dll. ты тоже читаешь по диагонали.

_________________
Разгони форум и сайт overclockers.ru: https://coolcmd.github.io/for/
https://youtu.be/4A67iTiOD_g


 

Member
Статус: Не в сети
Регистрация: 16.11.2010
CoolCmd
Либо я туплю, либо...
Функция SetSuspendState имеет 3 булевых аргумента и находится в powrprof.dll. Появилась там начиная с WinXP и есть по сей день.
Что мешает передать ей первый параметр для гибернации как под XP, так и под 7-кой?


 

Advanced member
Статус: Не в сети
Регистрация: 20.11.2004
Фото: 23
hc4 у rundll32 другое кол-во параметров и их назначение.
http://support.microsoft.com/kb/164787
http://support.microsoft.com/kb/555569

Добавлено спустя 3 часа 16 минут 55 секунд:
Выше было сказано, что rundll32.exe при вызове функции использует свой собственный постоянный набор параметров. Другими словами, функция должна быть специально разработана для вызова с помощью rundll32.exe. Однако в команде
Код:
rundll32 powrprof.dll,SetSuspendState
вызывается обычная Win32 функция. Как же эта команда работает? Если коротко: через жопу, причем действие команды будет меняться в зависимости от времени года на Марсе.

Подробнее. Функция SetSuspendState() должна вызываться так:
Код:
BOOLEAN __stdcall SetSuspendState(
  BOOLEAN Hibernate,
  BOOLEAN ForceCritical,
  BOOLEAN DisableWakeEvent
)


rundll32.exe вызывает ее так:
Код:
void __stdcall SetSuspendState(
  HWND hwnd,
  HINSTANCE hinst,
  LPSTR lpszCmdLine,
  int nCmdShow
)


Ни количество, ни смысл параметров не совпадают.

Сначала разберемся с количеством параметров. Их передается на 1 штуку больше. Значит после возврата из SetSuspendState() в стеке останутся 4 лишних байта. Обычно (если не восстановить указатель стэка) это приводит к вызову исключения и падению приложения. rundll32.exe не падает, скорее всего исключение ловит обработчик исключений, например блок __try / __catch.

Теперь смотрим, какие данные получает SetSuspendState() через стэк. Тип BOOLEAN - это unsigned char, но в стеке занимает 4 байта. Таким образом, размер всех параметров в стеке совпадает и равен 4 байтам. Это облегчит разбор.

Требуется BOOLEAN Hibernate. Передается на самом деле HWND hwnd. Скрытое окно создает rundll32.exe. Анализируется младший байт, поэтому в большинстве случаев параметр не равен нулю, а значит венда по возможности отправится в гибернацию. Однако иногда младший байт будет равен нулю и венда заснет. Русская рулетка.

Требуется BOOLEAN ForceCritical. Передается на самом деле HINSTANCE hinst. Это HINSTANCE модуля rundll32.exe. В Windows XP нет Address space layout randomization, поэтому параметр всегда равен базовому адресу, а именно 0x1000000. Младший байт нулевой, как нам и нужно. Фу, пронесло. :)

Требуется LPSTR lpszCmdLine. Передается на самом деле LPSTR lpszCmdLine. Память для командной строки выделяет LocalAlloc(), поэтому адрес будет меняться. Как и в случае с параметром Hibernate, в большинстве случаев младший байт не равен нулю. Это означает, что разбудить венду программно будет невозможно. Хреново.

Таким образом после использования этой кривой команды венду нельзя программно разбудить, и кроме того иногда венда будет засыпать вместо ухода в гибернацию. В 64-битной венде будет еще веселее, потому что размер параметров в стэке не совпадает.

Цитата:
Author: Soumitra Sengupta MVP

И правда, только индус мог поместить такое кривое решение в базу знаний.

_________________
Разгони форум и сайт overclockers.ru: https://coolcmd.github.io/for/
https://youtu.be/4A67iTiOD_g


 

Member
Статус: Не в сети
Регистрация: 16.11.2010
CoolCmd
Понял.
А чем shutdown /h не подходит?

пс. ну ты задрот :)


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
"останутся 4 лишних байта. Обычно ... это приводит к вызову исключения и падению приложения."
Попробуй вызвать wsprintf с шаблоном, который не совпадает с количеством передаваемых параметров. ))


 

Advanced member
Статус: Не в сети
Регистрация: 20.11.2004
Фото: 23
serj слово "обычно" тебе ни о чем не говорит? и где ты увидел у SetSuspendState() ... и __cdecl?

_________________
Разгони форум и сайт overclockers.ru: https://coolcmd.github.io/for/
https://youtu.be/4A67iTiOD_g


 

Member
Статус: Не в сети
Регистрация: 02.02.2007
Откуда: Казахстан
странно
но и tsshutdn тоже требует админских прав
так в чем разница?
почему нельзя использовать просто shutdown ?


 

Посоветуйте пожалуйста, можно ли к роутеру ZTE ZXA10 F660 подключить трубку wi-fi?.


Показать сообщения за:  Поле сортировки  
Форум закрыт Новая тема / Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней. Закрыто  Сообщений: 71 • Страница 4 из 4<  1  2  3  4
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan