Организация мгновенного PowerOFF под Win2k (XP)
От: FAngel  
Дата: 06.12.01 06:30
Оценка:
Не могу справится с задачей погашения питания под Windows2000 (XP).
А необходимо это для аварийного погашения компа в случае останова кулера или перегрева камня...
Обычный shutdown не устраивает абсолютно из-за своей тормознутости (15-60 сек.) и возможных зависонов. Хотелось бы реализовать powerOff что-то типа того, который происходит при нажатии клавиши Power на теперешних клавах (скорость погашения 1-2 сек.)
Перерыл SDK & DDK от мелкософта, но ничего не нашел
Может кто-то знает механизм PowerOFF, который происходит при нажатии на клаву Power?

В принципе эмуляция нажатия клавиши тоже бы подошла...
Найти информацию по скэнам для дополнительных клавиш типа управление питанием или же виндовой клавиши видимо невозможно
Искал и по нашим сайтам и по буржуйским — абсолютная темнота...


Заранее признателен Всем ответившим!!!
Re: Организация мгновенного PowerOFF под Win2k (XP)
От: Alex Fedotov США  
Дата: 06.12.01 06:49
Оценка: 4 (1)
Здравствуйте FAngel, Вы писали:

FA>Не могу справится с задачей погашения питания под Windows2000 (XP).

FA>А необходимо это для аварийного погашения компа в случае останова кулера или перегрева камня...
FA>Обычный shutdown не устраивает абсолютно из-за своей тормознутости (15-60 сек.) и возможных зависонов.

Попробуй поиграть с ZwShutdownSystem:

ZwShutdownSystem shuts down the system.

NTSYSAPI
NTSTATUS
NTAPI
ZwShutdownSystem(
    IN SHUTDOWN_ACTION Action
    );


Parameters

Action
The action to be performed after shutdown. Permitted values are drawn from the
enumeration SHUTDOWN_ACTION.
typedef enum _SHUTDOWN_ACTION {
    ShutdownNoReboot,
    ShutdownReboot,
    ShutdownPowerOff
} SHUTDOWN_ACTION;


Return Value
Returns STATUS_SUCCESS or an error status, such as STATUS_PRIVILEGE_NOT_HELD.

Related Win32 Functions
ExitWindows(Ex), InitiateSystemShutdown.

Remarks
SeShutdownPrivilege is required to shut down the system.
User-mode applications and services are not informed of the shutdown (drivers of devices that have registered for shutdown notification by calling IoRegisterShutdownNotification are informed).
The system must have hardware support for power-off if the power-off action is to be used successfully.
-- Alex Fedotov
Re[2]: Организация мгновенного PowerOFF под Win2k (XP)
От: FAngel  
Дата: 06.12.01 07:18
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Попробуй поиграть с ZwShutdownSystem:


Нашел такую в ntdll.dll!
Тока не понял как бы ее подцепить правильно из под VC...
В хедерах такого что-то не встретил... :(
А равно как и enum _SHUTDOWN_ACTION
У меня може чего-то в VC не хватает?

А где ты описание взял? У меня Platf SDK, MSDN , DDK W2k — все последнее, но там нет этого... :(
Re[3]: Организация мгновенного PowerOFF под Win2k (XP)
От: Alex Fedotov США  
Дата: 06.12.01 08:10
Оценка:
Здравствуйте FAngel, Вы писали:

AF>>Попробуй поиграть с ZwShutdownSystem:


FA>Нашел такую в ntdll.dll!

FA>Тока не понял как бы ее подцепить правильно из под VC...
FA>В хедерах такого что-то не встретил...
FA>А равно как и enum _SHUTDOWN_ACTION
FA>У меня може чего-то в VC не хватает?

Я разве не сказал? Sorry. Это недокументированная функция. Так что все определения придется сделать самостоятельно (надеюсь, это не очень сложно).

FA>А где ты описание взял? У меня Platf SDK, MSDN , DDK W2k — все последнее, но там нет этого...


Windows NT/2000 Native API Reference by Gary Nebbett.
-- Alex Fedotov
Re[4]: Организация мгновенного PowerOFF под Win2k (XP)
От: KaSA  
Дата: 06.12.01 08:20
Оценка:
Здравствуйте Alex Fedotov, Вы писали:


AF>Я разве не сказал? Sorry. Это недокументированная функция. Так что все определения придется сделать самостоятельно (надеюсь, это не очень сложно).


Кстати, а может и не ксатати , есть такая тулза — Dll to Lib называется. Знаете?
Догадайтесь, что делает? Очень помогает в подобных ситуациях
Линк: http://www.binary-soft.com/dll2lib/dll2lib.htm
"Апгрейд" тоже могу кинуть.
Re: Организация мгновенного PowerOFF под Win2k (XP)
От: FAngel  
Дата: 07.12.01 06:44
Оценка:
Всем огромное СЕНЬКС!
Получилось!
:)))
код на VB (ежели кому Си надо и не занете как то пишите) на VB короче ...

Declare Function RtlAdjustPrivilege Lib "ntdll" (ByVal a1 As Integer, ByVal a2 As Boolean, ByVal a3 As Boolean, ByRef a4 As Boolean) As Boolean
Declare Function ZwShutdownSystem Lib "ntdll" (ByVal f As Integer) As Boolean
Private Sub PowerOff()
Dim flag As Boolean
RtlAdjustPrivilege 19, True, False, flag
ZwShutdownSystem 2
End Sub

код проверен на w2k и на XP!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.