Возможно ли программно реализовать мгновенное выключение компа? Если нет, то каким образом можно сократить это время до минимума?
Есть 3 пути: 1) kernel32!ShutdownSystemEx Скорость: ~30 сек - 2 мин Плюсы: все приложения корректно завершаются системой. Минусы: система выключается офигенно долго. 2) ntdll!NtShutdownSystem Скорость: ~1-3 сек Плюсы: все ring0 приложения (драйвера и ядро ОС) корректно выгружаются, юзер обсирается от испуга. Минусы: все ring3 приложения летят в голубую даль 3) выход в ring0, биосовские прерывания Скорость: ~0.01-0.1 сек Плюсы: юзер умирает от обширного инфаркта. Минусы: так недолго и систему убить, написание кода под ring0 (тем более без драйвера) - дело, скажем, не из легких.
Спасибо! Попробовал по пункту 2 - действительно система вырубается где-то за 1-2 сек. Теперь буду разбираться с 3-им пунктом.
Там все просто Код (Text): NTSTATUS DriverEntry (PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pusRegistryPath) { return *((NTSTATUS *) 0); }
Это BSOD. А Sergei_2006 просит пример работы NtShutdownSystem. Код (Text): ZwShutdownSystem(ShutdownPowerOff);
Интересно было бы узнать, что за прерывания BIOS из ring0 можно заюзать. Как то бредово звучит. Самое простое,имхо, mov al,0FEh out 64h,al. Можно еще INIT самому себе послать через APIC. Правда и в том и в другом случае нужно проверять (если APIC включен и на машине 1 проц),что проц у тебя bootstrap. Иначе проц уйдет в глубокий даун, в котором даже SMI,NMI не ловит
Очень напряжно это тебе будет. Через APM можно (int 15h). Варианта два: 1. есть точка входа для защищённого режима - ей и пользоваться (может отсутствовать) 2. создавать V86 задачу, и в ней вызывать точку входа для реального режима (int 15h) Если драйвера никогда не писал - лучше начать с чего-нибудь по проще
На сайте в разделе загрузок я видел прогу shutdown97. На офф. сайте фасма она тоже есть. Выключает комп за 1~3 сек. Весит 97 байт.
У меня комп даже psshutdown Руссиновича не рубит От звуковой карты процесс никак ни свалить! Через пуск выключает нормально. Пуск - всемогущ! ;-